- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题: 为什么从未调用 MyInterceptor#onFlushDirty
?
我在 xml 配置中扩展 AbstractEntityManagerFactoryBean
<bean id="myEntityManagerFactory" parent="abstractEntityManagerFactoryBean" abstract="true">
<property name="entityInterceptor">
<bean class="xxxx.MyInterceptor"/>
</property>
</bean>
<bean id="abstractEntityManagerFactoryBean" class="xxxx.MyEntityManagerFactoryBean"/>
MyEntityManagerFactoryBean
public class MyEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean implements LoadTimeWeaverAware {
private Interceptor entityInterceptor;
public Interceptor getEntityInterceptor() {
return entityInterceptor;
}
public void setEntityInterceptor(Interceptor interceptor) {
entityInterceptor = interceptor;
}
}
我的拦截器:
public class MyInterceptor extends EmptyInterceptor {
public MyInterceptor() {
System.out.println("init"); // Works well
}
// PROBLEM - is never called
@Override
public boolean onFlushDirty(Object entity,
Serializable id,
Object[] currentState,
Object[] previousState,
String[] propertyNames,
Type[] types) {
if (entity instanceof File) {
.....
}
return false;
}
}
更新:[解释为什么自定义脏策略看起来不像我的方式]
每次更改 Folder
实体中的某些内容时,我都希望更新 modified
时间戳,folderPosition
除外。同时 folderPosition
应该是持久的而不是暂时的(意味着导致实体变脏)。
由于我使用 Spring Transactional 和 Hibernate 模板,所以有一些细微差别:
1) 我无法在每个 setter 的末尾更新修改后的时间戳,例如:
public void setXXX(XXX xxx) {
//PROBLEM: Hibernate templates collect object via setters,
//means simple get query will cause multiple 'modified' timestamp updates
this.xxx = xxx;
this.modified = new Date();
}
2) 我不能手动调用 setModified
,因为它有大约 25 个字段,每个字段的 setXXX
分散在整个应用程序中。而且我无权进行重构。
@Entity
public class Folder {
/**
* GOAL: Changing of each of these fields except 'folderPosition' should cause
* 'modified' timestamp update
*/
private long id;
private String name;
private Date created;
private Date modified;
private Integer folderLocation;
@PreUpdate
public void preUpdate() {
//PROBLEM : change modified even if only location field has been changed!
//PROBLEM: need to know which fields have been updated!
modified = new Date();
}
....
}
最佳答案
您需要扩展findDirty
方法而不是onFlushDirty
。检查this tutorial引用 GitHub 工作示例的详细说明。
关于java - 永远不会调用 onFlushDirty Hibernate Interceptor 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27602318/
我的 HibernateInterceptor 有问题。我延长了 EmptyInterceptor并覆盖 onFlushDirty方法。 我使用这种方法手动检查脏值(将以前的值与当前值进行比较)来为更
我想对我的实体更新进行审核。所以我实现了EmptyInterceptor。 我的 onFlushDirty() 方法没有执行,但 afterTransactionCompletion() 确实执行了
Contact Interceptor 附加 hibernate 配置 public class ContactInterceptor extends EmptyInterceptor { /
问题: 为什么从未调用 MyInterceptor#onFlushDirty? 我在 xml 配置中扩展 AbstractEntityManagerFactoryBean
我正在尝试使用 CaSTLe.ActiveRecord 对象的 OnFlushDirty 方法来实现通用的更改审计: protected override bool OnFlushDirty(obje
计划 我正在使用 Hibernate 为一个小项目实现 createDate 和 lastUpdate 时间戳。我使用 EmptyInterceptor 并根据我发现的建议解决方案重载提供的方法 he
我是一名优秀的程序员,十分优秀!