org.springframework.data.repository 可以管理 Hibernate 吗?

Can org.springframework.data.repository be Hibernate managed?

我一直在使用 Hibernate Search 查询数据库条目。对于我的大多数情况,我使用 cron 作业来构建我的索引,但对于一个特定情况,我需要索引在实体更改时立即更新。 我注意到虽然 springframework.data.repository 正确更新数据库中的数据,但 Hibernate 不会对索引中的相应实体执行更新。

当我更改我的实现以使用此事务的实体管理器(使用 entitymanager.persist(x) 等...)时,它也会正确更新索引。

我喜欢 crud 存储库的简单性,我想保持一致,那么有没有办法让 hibernate 使用 crud 存储库知道这一变化?

Spring Data 提供了一个JPA-based CRUD repository,它将依赖JPA(Hibernate ORM)来执行CRUD 操作,从而允许Hibernate Search 自动更新索引。您不需要自己实现对 entityManager.persist() 等的调用。

如果您的 CRUD 存储库使用 JPA(Hibernate ORM),那么当然(正如您注意到的那样)Hibernate Search 不会意识到更改,也不会更新索引。

您没有具体说明您的 CRUD 存储库是如何实现的,所以我想您正在使用 Spring Data JDBC 实现?这是我所知道的唯一允许您在 Spring 数据中更新数据库而不依赖 JPA (Hibernate ORM) 的方法。

我建议切换到 Spring Data JPA 实现,至少对于需要自动、动态索引的实体。

如果那真的不是一个选项,我想你可以以某种方式插入 Spring 数据 JDBC(覆盖 CRUD 方法,或者可能使用事件监听器),这样,每次实体已更改:

不过,我怀疑性能会非常好。特别是,您将错过 Hibernate Search 中的一些优化,当更改仅与未索引的属性有关时避免重新索引。