JPA Hibernate启用JPA审核是更新必需的
我使用JPA提供的@EnableJpaAuditing、@LastModifiedDate、@EntityListeners(AuditingEntityListener.class)记录审核信息,但发现当我的实体字段没有更改时,JPA不会向数据库发送更新SQL语句。我查看了源代码,发现hibernate会调用一个isUpdateNessary来决定是否向数据库发送更新SQLJPA Hibernate启用JPA审核是更新必需的,hibernate,jpa,Hibernate,Jpa,我使用JPA提供的@EnableJpaAuditing、@LastModifiedDate、@EntityListeners(AuditingEntityListener.class)记录审核信息,但发现当我的实体字段没有更改时,JPA不会向数据库发送更新SQL语句。我查看了源代码,发现hibernate会调用一个isUpdateNessary来决定是否向数据库发送更新SQL if ( isUpdateNecessary( event, mightBeDirty ) ) {
if ( isUpdateNecessary( event, mightBeDirty ) ) {
substitute = scheduleUpdate( event ) || substitute;
}
if ( status != Status.DELETED ) {
// now update the object .. has to be outside the main if block above (because of collections)
if ( substitute ) {
persister.setPropertyValues( entity, values );
}
// Search for collections by reachability, updating their role.
// We don't want to touch collections reachable from a deleted object
if ( persister.hasCollections() ) {
new FlushVisitor( session, entity ).processEntityPropertyValues( values, types );
}
}
因此,我的审核信息将不会更新。如果我想执行更新SQL,我应该怎么做。感谢您的回答。请仔细考虑您的编辑目的,如果没有值发生更改,为什么要进行更新?其他问题,假设您进行了所需的更新,但没有更改任何值,新的“lastModifiedDate”将是错误的,因为它将是“无修改保存”的日期。这是你想要的吗?@Zorglube非常感谢你的回答。我知道这有点奇怪。但我确实需要在某些情况下这样做。在这种情况下,我建议您使用一种肮脏但有效的解决方法,只需在实体上更改一个值并保存它。