Hibernate Search需要@DocumentId吗?

时间:2012-09-11 20:57:15

标签: hibernate indexing hibernate-search

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

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

谢谢你的时间!

1 个答案:

答案 0 :(得分:5)

如果您使用旧实体样式将实体与@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的Session而不是JPA的EntityManager用于查询。简而言之:如果使用XML样式的映射,则需要使用@DocumentId ...如果您使用注释,则可以选择使用注释,因为此时您应该使用JPA样式的注释。 / p>