以编程方式添加JPA EntityListener / Spring Data AuditingEntityListener

时间:2016-11-14 20:30:34

标签: java spring jpa spring-data spring-data-jpa

我使用JPA和部分Spring(如事务管理,JPA存储库),但我不使用Spring进行依赖注入,而是将Spring部分视为POJO对象。到目前为止,我的工作很棒:我有运行时生成的JPA存储库类,事务由Spring类管理。

但是,我似乎无法弄清楚如何让JPA审核听众工作。

例如,我的BaseEntity定义了EntityListener类和审核字段:

@MappedSuperclass
@EntityListeners( { AuditingEntityListener.class } )
public class BaseEntity implements Serializable
{
  @CreatedDate
  @Field( index = Index.YES, store = Store.YES )
  @Column( name = "date_created" )
  @Temporal( TemporalType.TIMESTAMP )
  private Date dateCreated;

  @CreatedBy
  @Column( name = "created_by" )
  private Long createdBy;

  //other stuff
}

您可以看到我指定了Spring AuditEntityListener类。应用程序中的所有其他实体类都扩展了此BaseEntity类。

然后,我有一个实现AuditorAware的类:

public class JpaAuditConfiguration implements AuditorAware<Long>
{

  @Override
  public Long getCurrentAuditor()
  {
    //pretend there's real logic here...
    return new Long(0);
  }
}

现在,由于我没有使用Spring或Spring Data自行启动,因此我需要一种方法来使用JpaAuditConfiguration注册此AuditingEntityListener

我的问题:如何以编程方式JpaAuditConfiguration注册AuditEntityListener

如果有帮助,我会使用像LocalContainerEntityManagerFactoryBean这样的Spring类(以编程方式创建EntityManagerFactory)和PersistenceUnitPostProcessor以编程方式执行其余的JPA配置。我正在寻找允许我进行上面提到的实体审计监听器注册的钩子。

我没有使用任何orm.xmlpersistence.xml JPA配置文件。

我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:1)

@Configuration
@EnableJpaAuditing
class Config {

  @Bean
  public AuditorAware<Long> auditorProvider() {
    return new JpaAuditConfiguration ();
  }
}

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.auditing