【发布时间】:2014-04-17 05:42:11
【问题描述】:
我正在尝试让 Spring Data Auditing 在我的 Spring 3.2.8 / Spring Data 1.5 / Hibernate 4 项目中工作。
根据Spring Data Auditing docs,我已将@CreatedBy 等注释添加到我的实体中,由AuditorAware 实现创建,并在我的JavaConfig 中对其进行实例化。但是,它似乎永远不会触发。
我发现文档有点混乱。看来JavaConfig条目替换了xml条目,但我不确定。
我的应用程序中目前没有任何orm.xml 文件。老实说,我什至不确定在哪里/如何配置它,或者我为什么需要它。我所有的实体都在使用注释。我曾尝试将 @EntityListeners(AuditingEntityListener.class) 添加到实体中,但这没有帮助。
我当前的实体管理器是在没有 persistence.xml 文件的情况下定义的:
<!-- entity manager -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
<property name="packagesToScan" value="com.ia.domain"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.query.substitutions">true '1', false '0'</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
<prop key="hibernate.connection.charSet">UTF-8</prop>
</props>
</property>
</bean>
Java配置:
@Configuration
@EnableJpaAuditing
public class AuditConfig {
@Bean
public AuditorAware<User> auditorProvider(){
return new SpringSecurityAuditorAware();
}
}
实体:
@EntityListeners({AuditingEntityListener.class})
@Entity
public class User
{
@TableGenerator(name="UUIDGenerator", pkColumnValue="user_id", table="uuid_generator", allocationSize=1)
@Id
@GeneratedValue(strategy=GenerationType.TABLE, generator="UUIDGenerator")
@Column(name="id")
private Long id;
@NotNull
private String username;
@CreatedDate
@NotNull
@Temporal(TemporalType.TIMESTAMP)
@Column(name="created_date", nullable=false)
private Date createdDate;
@LastModifiedDate
@NotNull
@Temporal(TemporalType.TIMESTAMP)
@Column(name="last_modified_date", nullable=false)
private Date lastModifiedDate;
@CreatedBy
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="created_by")
private User createdBy;
@LastModifiedBy
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="last_modified_by")
private User lastModifiedBy;
private String password;
private Boolean enabled;
...
}
我在SpringSecurityAuditorAware 类中设置了一个断点,但它从未被击中。
我还需要 orm.xml 文件吗? EntityManager 是如何/在哪里引用它的?
【问题讨论】:
-
如何将 XML 配置连接到 JavavConfig?您是否有机会在 GitHub 存储库等中分享该项目?我可以成功地将auditing sample project 更改为在
AbstractEntity上使用@EntityListeners并从项目中删除orm.xml。您介意检查一下示例项目和您的项目之间的差异吗? -
@OliverGierke 我的 XML 是我的 applicationContext 文件的一部分,该文件由 web.xml 中定义的 Spring Listener 加载。如果可以在较小的级别上重现问题,我将尝试整理一个示例项目并推送到 github。
-
@OliverGierke 我花了一大早上的时间试图在示例应用程序中重现问题。最终我能够重现该问题,但我认为我将其缩小为 jRebel 问题。我还不能 100% 确定这一点,但这似乎就是它的发展方向。我会及时通知你。
-
@OliverGierke 原来这是一个 jRebel 问题。我一直在使用 aspectJ 在
@EntityListeners()中编译时间编织,但是当 jRebel 加载类时,它使用指向原始实体而不是增强类的类路径。我不得不删除 jRebel maven 插件生成的 rebel.xml 文件,现在一切似乎都正常工作了。 -
嘿@EricB。我们正在使用
Jrebel并面临同样的问题。让jrebel与Spring Data Auditing一起玩的任何想法
标签: java spring jpa spring-data audit