6

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

在我的代码中没有 @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 文档说@DocumentId在使用JPA注释时这是可选的。因此,如果您使用的是 Hibernate 3.x 风格的注释,也许您仍然需要使用@DocumentId......我从未测试过这个。

无论哪种方式,Hibernate 4.x 都弃用了它自己的映射注释以支持 JPA 样式的注释,即使您使用 HibernateSession而不是 JPAEntityManager进行查询也是如此。简而言之:@DocumentId如果您使用的是 XML 样式的映射,则需要使用……而如果您使用的是注释,则它是可选的,因为此时您无论如何都应该使用 JPA 样式的注释。

于 2012-10-02T20:52:43.717 回答