Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA Hibernate启用JPA审核是更新必需的_Hibernate_Jpa - Fatal编程技术网

JPA Hibernate启用JPA审核是更新必需的

JPA Hibernate启用JPA审核是更新必需的,hibernate,jpa,Hibernate,Jpa,我使用JPA提供的@EnableJpaAuditing、@LastModifiedDate、@EntityListeners(AuditingEntityListener.class)记录审核信息,但发现当我的实体字段没有更改时,JPA不会向数据库发送更新SQL语句。我查看了源代码,发现hibernate会调用一个isUpdateNessary来决定是否向数据库发送更新SQL if ( isUpdateNecessary( event, mightBeDirty ) ) {

我使用JPA提供的@EnableJpaAuditing、@LastModifiedDate、@EntityListeners(AuditingEntityListener.class)记录审核信息,但发现当我的实体字段没有更改时,JPA不会向数据库发送更新SQL语句。我查看了源代码,发现hibernate会调用一个isUpdateNessary来决定是否向数据库发送更新SQL

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非常感谢你的回答。我知道这有点奇怪。但我确实需要在某些情况下这样做。在这种情况下,我建议您使用一种肮脏但有效的解决方法,只需在实体上更改一个值并保存它。