【问题标题】:Spring Data JPA auditing not workingSpring Data JPA 审计不起作用
【发布时间】:2015-01-20 16:50:42
【问题描述】:

伙计们,

我们很难在 Spring DATA JPA 中集成审计支持。

我们使用的是 spring 3.2.11 和 hibernate 4.3.0。 (我们不想使用 ORM.xml)

问题是当保存客户实体时,我们没有收到“AuditAwareImpl”类中的任何事件。

(我们调试了 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;    

}

}

【问题讨论】:

标签: spring hibernate jpa spring-data-jpa


【解决方案1】:

您需要调用存储库的 saveAndFlush 方法。 org.springframework.data.jpa.repository.JpaRepository 的 save 方法同时支持保存和更新。如果是update,则调用em.merge(),但不会触发PreUpdate事件。如果要触发 PreUpdate,需要调用 saveAndFlush 方法

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2014-02-15
    相关资源
    最近更新 更多