6

私は Hibernate Search を使用しており、ドキュメンテーションと本には、Hibernate Search がインデックスをオブジェクトにマップする方法を知ることができるように、id フィールドに @DocumentId が必要であると書かれています。

コードのどこにも @DocumentId がなくても、私のコードは正常に動作しているようです。Hibernate Search は @Id フィールドが優れたデフォルトであることを理解できるほどスマートになりましたか? これによって引き起こされる明らかではない問題はありますか?

御時間ありがとうございます!

4

1 に答える 1

6

@DocumentId.hbm.xmlエンティティをファイルにマッピングする昔ながらのスタイルを使用している場合は必須です。そのマッピング アプローチを使用していて、ドキュメント ID に注釈を付けるのを怠ると、起動時に次のような例外が表示されます。

org.hibernate.search.SearchException: No document id in: com.mypackage.MyEntity

ただし、アノテーションを使用していて、主キーに でアノテーションを付けている場合は、@Idを使用する必要はありません@DocumentId

より正確には、Hibernate Search のドキュメントには、JPAアノテーション@DocumentIdを使用する場合はオプションであると記載されています。したがって、Hibernate 3.x スタイルのアノテーションを使用している場合は、まだ使用する必要があるかもしれません...私はこれをテストしたことがありません。 @DocumentId

いずれにせよ、Hibernate 4.xは、クエリにJPA ではなくHibernate を使用している場合でも、JPA スタイルのアノテーションを優先して独自のマッピング アノテーションを廃止します。つまり、一言で言えば、XML スタイルのマッピングを使用している場合は使用する必要があります... 一方、注釈を使用している場合はオプションです。この時点ではとにかく JPA スタイルの注釈を使用する必要があるためです。SessionEntityManager@DocumentId

于 2012-10-02T20:52:43.717 に答える