Hibernate Search需要@DocumentId吗?

jac*_*ews 5 indexing hibernate hibernate-search

我正在使用Hibernate Search,文档和书籍说我需要在id字段上使用@DocumentId,以便Hibernate Search可以知道如何将索引映射到对象.

我的代码似乎在没有@DocumentId的情况下工作正常.Hibernate Search是否足够聪明,以确定@Id字段是一个很好的默认值?是否存在导致不明显的问题?

谢谢你的时间!

Ste*_*ins 5

@DocumentId如果您使用旧式样式将实体映射到.hbm.xml文件,则是必需的.如果您使用该映射方法而忽略了对文档ID进行注释,那么在启动时您将看到如下异常:

org.hibernate.search.SearchException: No document id in: com.mypackage.MyEntity
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用注释并注释了主键@Id,则不必使用@DocumentId.

更准确地说,Hibernate Search文档说@DocumentId在使用JPA注释时是可选的.所以@DocumentId如果你使用Hibernate 3.x风格的注释,或许你仍然需要使用...我从来没有测试过这个.

无论哪种方式,Hibernate 4.x都会弃用自己的映射注释,转而使用JPA样式的注释,即使您使用Hibernate Session而不是JPA来EntityManager进行查询.简而言之:@DocumentId如果您使用XML样式的映射,则需要使用...如果您使用注释,则它是可选的,因为此时您应该使用JPA样式的注释.