2012-09-11 66 views
5

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

我的代码似乎没有@DocumentId在我的代码中的任何地方工作正常。 Hibernate Search是否足够聪明地发现@Id字段是一个很好的默认值?有没有问题会导致不明显?

谢谢你的时间!

回答

4

@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 ......我从来没有测试过这个。

无论哪种方式,休眠4.x的弃用自己的地图标注有利于JPA风格的注解,即使您正在使用Hibernate的Session,而不是JPA的EntityManager为您查询。因此,简而言之,如果您使用的是XML样式映射,则需要使用@DocumentId;但如果您使用注释,则它是可选的,因为此时您应该使用JPA样式注释。

+0

我认为这是事实,但我无法在文档中找到它。谢谢! – jackcrews