hibernate - hibernate 搜索是否需要@DocumentId?

标签 hibernate indexing hibernate-search

我正在使用 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 注释。所以也许你仍然需要使用 @DocumentId如果您使用的是 Hibernate 3.x 样式的注释......我从未测试过这个。

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

关于hibernate - hibernate 搜索是否需要@DocumentId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12377808/

相关文章:

java - 当前 session 在捕获异常后无效,但我必须进行更多查询

java - 在 hibernate 搜索中使用任何搜索词和合作社 id 查询合作社成员

java - Hibernate 搜索配置帮助

java - 嵌入式 H2 数据库连接错误 - 用户名和密码错误

hibernate - Grails Hibernate GORM,具有一对一关系的 Multi-Tenancy

mysql - Grails DetachedCriteria 使用 'where' 抛出 SyntaxErrorException

sql-server - 优化特定表的查询

python - 在 Python 中索引浮点值

sql - 如何以编程方式确定索引列是 ASC 还是 DESC

elasticsearch - Hibernate Elasticsearch搜索类型dfs_query_then_fetch