民间,
我们很难在Spring DATA JPA中整合审计支持。
我们使用的是spring 3.2.11和hibernate 4.3.0。 (我们不想使用ORM.xml)
问题是我们未在“审计意见”中收到任何事件。保存客户实体时的类。
(我们调试了AuditingEntityListener并发现AuditHandler正在正确注入,但是在以后的点上事件没有被触发。我们怀疑有些类加载问题)
下面的代码。
基本上我们有两个商业实体。
@Entity(name = "CUSTOMER")
@Table(name = "CUSTOMER_DETAILS")
@EntityListeners(AuditingEntityListener.class)
public class Customer extends AbstractAuditable<User, Long> {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
用户实体:
@Entity(name = "USER")
@Table(name = "USER_DETAILS")
public class User extends AbstractPersistable<Long>{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我们有一个辅助类来配置spring。
@Configuration
@EnableTransactionManagement
@EnableJpaAuditing(auditorAwareRef = "auditorAwareImpl")
@EnableJpaRepositories(basePackages = "businessclass")
public class PersistenceContext {
}
AuditAwareImpl。
@Component
public class AuditorAwareImpl implements AuditorAware<User> {
public User getCurrentAuditor() {
ApplicationContext context = ApplicationContextManager.getContext();
UserRepository repository = (UserRepository)context.getBean("userRepository");
User user = new User();
user.setName("work now");
repository.save(user);
return user;
}
}
答案 0 :(得分:1)
您需要调用存储库的saveAndFlush方法。 org.springframework.data.jpa.repository.JpaRepository的save方法支持save和update。如果是更新,则调用em.merge(),但不会触发PreUpdate事件。如果要触发PreUpdate,则需要调用saveAndFlush方法