我正在使用 Hibernate Search,文档和书籍说我需要在 id 字段上使用@DocumentId,以便 Hibernate Search 可以知道如何将索引映射到对象。
在我的代码中没有 @DocumentId 的情况下,我的代码似乎工作正常。Hibernate Search 是否变得足够聪明,可以发现 @Id 字段是一个很好的默认值?这会导致不明显的问题吗?
谢谢你的时间!
我正在使用 Hibernate Search,文档和书籍说我需要在 id 字段上使用@DocumentId,以便 Hibernate Search 可以知道如何将索引映射到对象。
在我的代码中没有 @DocumentId 的情况下,我的代码似乎工作正常。Hibernate Search 是否变得足够聪明,可以发现 @Id 字段是一个很好的默认值?这会导致不明显的问题吗?
谢谢你的时间!
@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 样式的注释,即使您使用 HibernateSession
而不是 JPAEntityManager
进行查询也是如此。简而言之:@DocumentId
如果您使用的是 XML 样式的映射,则需要使用……而如果您使用的是注释,则它是可选的,因为此时您无论如何都应该使用 JPA 样式的注释。