我在休眠搜索中遇到问题,因为当我使用条件构建器1而不是在不使用其类的情况下按1来更新字段时,它不会在休眠搜索中更新其索引吗?您能启发我为什么会发生这种情况吗?谢谢。
val builder: CriteriaBuilder = entityManager.criteriaBuilder
val criteria: CriteriaUpdate<Profile> = builder.createCriteriaUpdate(Profile::class.java)
val root: Root<Profile> = criteria.from(Profile::class.java)
fname?.let { criteria.set(root.get("firstName"), it) }
lname?.let { criteria.set(root.get("lastName"), it) }
birthdate?.let { criteria.set(root.get("birthDate"), it) }
mname?.let { criteria.set(root.get("middleName"), it) }
criteria.set(root.get("updatedBy"), uid)
.where(builder.equal(root.get<String>("user").get<String>("id"), uid))
entityManager.createQuery(criteria).executeUpdate()
当您使用条件更新/删除查询时,您的查询将转换为SQL并直接发送到数据库。这意味着Hibernate ORM将不知道确切更改了哪些实体,因此将不发送与这些更改有关的内部事件。因此,Hibernate Search根本不会意识到更改,也无法为实体重新编制索引。
[Hibernate Search 6(当前为Beta)文档中对此限制进行了解释:https://docs.jboss.org/hibernate/search/6.0/reference/en-US/html_single/#mapper-orm-indexing-automatic-concepts
有两种解决方法:
FullTextSession.index
事实后触发实体的重新索引。