我正在使用 Spring 5.1 和 Hibernate 5.3.9,包括 hibernate-envers。我不知道如何将 spring bean 注入到 hibernate envers 自定义 RevisionListener 中。
我努力了
(@Service or @Component)
public class ExtendedRevisionListener implements RevisionListener {
@Autowired
private MyService myService;
void newRevision(Object revisionEntity){
myService.doSomething(...)
}
}
Run Code Online (Sandbox Code Playgroud)
当然,该类包含在 @ComponentScan 包解析中。问题是 myService 没有注入到侦听器中。
在 hibernate-envers 文档中:
从 Hibernate Envers 5.3 开始,RevisionListener 现在支持依赖注入。此功能取决于各种依赖框架(例如 CDI 和 Spring),以在 Hibernate ORM 引导期间提供必要的实现以支持注入。如果未提供合格的实现,则将在不注入的情况下构造 RevisionListener。
不幸的是我还没有找到任何有效的例子。
@Naros我在我的Spring持久性JPA配置中设置了EntityMaganerFactoryBean - >entityManager = new org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean()
10:49| DEBUG | SessionFactoryImpl.java 252 | Session factory constructed with filter configurations : {}
10:49| DEBUG …Run Code Online (Sandbox Code Playgroud) 我有一个JPQL查询
@Query("SELECT e FROM Entry e WHERE :chosenDate BETWEEN e.periodFrom AND e.periodTo")
List<Entry> findByChosenDate(LocalDate chosenDate);
Run Code Online (Sandbox Code Playgroud)
有一个问题,当未设置属性“ periodFrom”或“ periodTo”之一时,将不会选择该条目。我希望查询还包括带有一个或两个NULL值的整数。
我希望查询在其他三种情况下选择条目:
当“ periodFrom”为空而“ periodTo”为空时,应找到该条目。
当“ periodFrom”为空并且“ periodTo”> =:chosenDate时,应找到该条目。
当“ periodFrom” <=:chosenDate和“ periodTo”为空时,应找到该条目。
有没有比这样的查询更简单的方法:
@Query("SELECT e FROM Entry e WHERE (:chosenDate BETWEEN e.periodFrom AND e.periodTo)
OR (e.periodFrom IS NULL AND e.periodTo IS NULL )
OR ( e.periodFrom <= :chosenDate AND e.periodTo IS NULL)
OR (e.periodFrom IS NULL AND e.periodTo >= :chosenDate)")
List<Entry> findByChosenDate(LocalDate chosenDate);
Run Code Online (Sandbox Code Playgroud)