我正在使用Hibernate Search,文档和书籍说我需要ID字段的@DocumentId,以便Hibernate Search可以知道如何将索引映射到对象。Hibernate搜索需要@DocumentId吗?
我的代码似乎没有@DocumentId在我的代码中的任何地方工作正常。 Hibernate Search是否足够聪明地发现@Id字段是一个很好的默认值?有没有问题会导致不明显?
谢谢你的时间!
我正在使用Hibernate Search,文档和书籍说我需要ID字段的@DocumentId,以便Hibernate Search可以知道如何将索引映射到对象。Hibernate搜索需要@DocumentId吗?
我的代码似乎没有@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
......我从来没有测试过这个。
无论哪种方式,休眠4.x的弃用自己的地图标注有利于JPA风格的注解,即使您正在使用Hibernate的Session
,而不是JPA的EntityManager
为您查询。因此,简而言之,如果您使用的是XML样式映射,则需要使用@DocumentId
;但如果您使用注释,则它是可选的,因为此时您应该使用JPA样式注释。
我认为这是事实,但我无法在文档中找到它。谢谢! – jackcrews