是否可以在Spring Boot中集成Spring托管Hibernate拦截器(http://docs.jboss.org/Hibernate/orm/4.3/manual/en-us/html/ch14.html)?
我正在使用Spring Data JPA和Spring Data REST并需要一个Hibernate拦截器来处理实体上特定字段的更新。
对于标准的JPA事件,不可能获得旧值,因此我认为我需要使用Hibernate拦截器。
没有特别简单的方法来添加一个同时也是Spring Bean的Hibernate拦截器,但是如果它完全由Hibernate管理,您可以很容易地添加一个拦截器。为此,请将以下内容添加到application.properties
:
spring.jpa.properties.hibernate.ejb.interceptor=my.package.MyInterceptorClassName
如果您需要拦截器也是bean,那么您可以创建自己的LocalContainerEntityManagerFactoryBean
。Spring Boot 1.1.4中的EntityManagerFactoryBuilder
对属性的泛型限制过大,因此需要强制转换为(Map)
,我们将研究在1.2中解决这一问题。
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder factory, DataSource dataSource,
JpaProperties properties) {
Map<String, Object> jpaProperties = new HashMap<String, Object>();
jpaProperties.putAll(properties.getHibernateProperties(dataSource));
jpaProperties.put("hibernate.ejb.interceptor", hibernateInterceptor());
return factory.dataSource(dataSource).packages("sample.data.jpa")
.properties((Map) jpaProperties).build();
}
@Bean
public EmptyInterceptor hibernateInterceptor() {
return new EmptyInterceptor() {
@Override
public boolean onLoad(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
System.out.println("Loaded " + id);
return false;
}
};
}
我使用Spring Boot v2.0.3和Hibernate 5.2。我想创建一个Hibernate拦截器,在我的一个实体字段中生成一个值,基于我数据库中的一个唯一数字,然后保存。 我获取了一些在线资源,并最终扩展了Hibernate空拦截器,以覆盖onSave方法。 在我的申请中。yml配置文件,我添加了以下键: 当我尝试保存票证时,我可以看到方法onSave被正确调用,但是由于拦截器完全由H
问题内容: 我看到 一吨 的条目在我的Tomcat日志(样品粘贴下面)。这些在几个月前进行次要版本升级(Spring Security 4.2.4,IIRC)后开始出现在我的日志文件中,因此,这显然是默认情况下启用的Spring新安全功能。这里报告了类似的问题,但是我的问题专门涉及如何在控制器中拦截这些异常。有一个针对此问题的Spring Security错误记录(提供一种处理RequestRej
我在Tomcat日志中看到大量条目(示例粘贴在下面)。在几个月前的一次小版本升级(Spring Security 4.2.4,IIRC)后,这些功能开始出现在我的日志文件中,因此这显然是Spring中默认启用的一个新的安全特性。这里报告了一个类似的问题,但我的问题具体涉及如何在控制器中拦截这些异常。这个问题有一个Spring Securitybug(提供一种处理RequestRejectedExc
我正在尝试使用<code>网络客户端 谢谢 -斯里尼
问题内容: 如何在Hibernate拦截器中获取Hibernate会话? 我正在尝试使用Hibernate通过组织ID透明地强制执行数据访问。我设置了一个全局筛选器,以按组织ID筛选所有查询。现在,在保存/更新之前,我需要使用实体拦截器在所有实体上设置组织ID。 组织ID来自HttpSession 我已经在Hibernate会话中将Organizational Id设置为Filter属性,我想在我
是否可以在数据库连接或数据源的底层放置一个钩子,并在执行任何其他查询之前执行一个查询? 你好。 我希望能够在Hibernate状态下拦截所有数据库查询,并在原始查询发送到数据库之前注入执行一个简单的查询:。 由于hibernate对其管理的实体使用生命周期,所以我发现实现我所需要的是一个挑战。 在我的Spring启动应用程序中,我想使用触发器审核数据更改。我希望能够将更改与Spring应用程序中当