【问题标题】:Is @DocumentId required for Hibernate Search?休眠搜索是否需要 @DocumentId?
【发布时间】:2012-09-11 20:57:15
【问题描述】:
我正在使用 Hibernate Search,文档和书籍说我需要在 id 字段上使用 @DocumentId,以便 Hibernate Search 可以知道如何将索引映射到对象。
如果我的代码中没有 @DocumentId,我的代码似乎可以正常工作。 Hibernate Search 是否变得足够聪明,可以发现 @Id 字段是一个很好的默认值?这会导致不明显的问题吗?
感谢您的宝贵时间!
【问题讨论】:
标签:
hibernate
indexing
hibernate-search
【解决方案1】:
@DocumentId 是必需的,如果您使用老式风格的映射您的实体与.hbm.xml 文件。如果您使用该映射方法而忽略注释文档 id,那么在启动时您将看到如下异常:
org.hibernate.search.SearchException: No document id in: com.mypackage.MyEntity
但是,如果您正在使用注释并且已使用@Id 注释了主键,那么您不必使用@DocumentId。
更准确地说,Hibernate Search 文档说 @DocumentId 在使用 JPA 注释时是可选的。因此,如果您使用的是 Hibernate 3.x 风格的注释,也许您仍然需要使用 @DocumentId ......我从未测试过这个。
无论哪种方式,Hibernate 4.x 都弃用了自己的映射注释,转而支持 JPA 样式的注释,即使您使用的是 Hibernate 的 Session 而不是 JPA 的 @ 987654329@为您的查询。简而言之:如果您使用的是 XML 样式的映射,则需要使用 @DocumentId……而如果您使用的是注解,则它是可选的,因为此时您无论如何都应该使用 JPA 样式的注解。