我正在尝试使用JPA审核框架配置Spring JPA以更新时间戳列。
我认为我已正确配置它,但每当我创建或更新行时,它只在所有可审核字段上设置为null。 (注意字段是在数据库中创建的,如果我手动写入一个值,它将被null覆盖。)
我在这里缺少什么?我是否需要明确设置上次修改日期等?
我的审核员bean也没有被触发,我设置了一个断点并且它从未输入,这让我怀疑我错过了审计服务的一些配置。
到目前为止,我有这些定义:
@Configuration
@EnableTransactionManagement
@EnableJpaAuditing(auditorAwareRef = "auditorBean")
@EnableJpaRepositories(basePackages="com.ideafactory.mvc.repositories.jpa")
public class PersistenceConfig
{...
审核员意识到的课程:
@Component
public class AuditorBean implements AuditorAware<Customer> {
private static final Logger LOGGER= LoggerFactory.getLogger(AuditorBean.class);
private Customer currentAuditor;
@Override
public Customer getCurrentAuditor() {
// Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
//
// if (authentication == null || !authentication.isAuthenticated()) {
// return null;
// }
//
// return ((MyUserDetails) authentication.getPrincipal()).getUser();
LOGGER.debug("call AuditorAware.getCurrentAuditor(");
return currentAuditor;
}
public void setCurrentAuditor(Customer currentAuditor) {
this.currentAuditor = currentAuditor;
}
}
我的实体配置:
@Entity
@Table(name= "contact_us_notes")
public class ContactUsNote extends AbstractAuditable<Customer, Long> {...
==========================更新==================== ======== 好的,我回过头来看看,似乎我错过了配置实体监听器。所以它现在有点工作了。
但现在我的问题变成了如何在java配置中将侦听器配置为所有实体的默认值? (类似于docs在orm.xml中推荐的方式)。
我在下面添加了实体监听器注释。
@Entity
@Table(name= "contact_us_notes")
@EntityListeners({AuditingEntityListener.class})
public class ContactUsNote extends AbstractAuditable<Customer, Long> {
答案 0 :(得分:2)
您是否在/ resources / META-INF中创建了一个orm.xml文件?我在你的问题中没有看到它。