gpt4 book ai didi

java - ENVERs 字段修改未设置

转载 作者:行者123 更新时间:2023-12-02 04:03:44 26 4
gpt4 key购买 nike

我有一个正在运行的 ENVERs 项目,我正在完成该项目的实现,并注意到属性级别修改跟踪功能。此功能听起来非常适合我们的需求,并将取代一些(手动)表。

问题就出在这里;我在数据库中设置了字段,但当我更改状态列等内容时,ENVER 不会更新这些字段。

表;

DROP TABLE IF EXISTS `enrollment_history` ;
CREATE TABLE `enrollment_history` (
`revision` INTEGER NOT NULL,
`revision_type` INTEGER NOT NULL,
`enrollment_id` BIGINT(20) NOT NULL,
`enrollment_status_id` BIGINT(20) NOT NULL,
`enrollment_status_id_modified` boolean NOT NULL default 0,
PRIMARY KEY USING BTREE (`enrollment_id`, `revision`))
ENGINE=INNODB;

POJO:

@Entity
@Table(name = "enrollment")
@Audited(withModifiedFlag = true)
public class Enrollment implements Serializable {
//...
@Column(name = "enrollment_status_id", nullable = false)
@NotNull
@Enumerated(EnumType.ORDINAL)
@Audited(modifiedColumnName = "enrollment_status_id_modified")
private EnrollmentStatus status;

// getters setters etc
//...
}

DAO

public class DAO {

@Autowired
private SessionFactory sessionFactory;

public AuditReader getAuditReader() {
return AuditReaderFactory.get(sessionFactory.getCurrentSession());
}

@SuppressWarnings("unchecked")
@Override
public List<Enrollment> getEnrollmentsWhereStatusIsChanged(long userId) {
AuditReader reader = getAuditReader();

List<Enrollment> specificChanges =
//@formatter:off
reader
.createQuery()
.forRevisionsOfEntity(Enrollment.class, true, true)
.add(AuditEntity.id().eq(userId))
.add(AuditEntity.property("status").hasChanged())
.getResultList();
//@formatter:on

return specificChanges;
}
}

任何关于我所缺少的内容的指导都会很棒。看起来恩弗斯似乎知道这些字段,因为它不再提示映射,但在运行时它缺少一些东西来填充它们或从中读取数据。

这是我在运行时收到的错误;

org.hibernate.QueryException: could not resolve property: status_modified of: com.intellimec.drivesync.database.entity.enrollment.Enrollment_history 

****编辑****我们使用的是 Hibernate 4.3.11.Final

最佳答案

其根本原因是我将全局“org.hibernate.envers.global_with_modified_flag”设置为 false,并且框架中存在一个错误,如果设置了该值,则无法覆盖它,这与其他全局配置不同。我已登录HHH-10468对于这个问题。

另一个警告,@Audited 注释的 withModifiedFlag(和 ModifiedColumnName)属性在类级别指定时绝对不会执行任何操作。我已登录HHH-10469对于这个问题。

为了解决这些问题,我删除了所提供的全局设置,因为它无法被覆盖,并将我的 POJO 更改为如下所示;

@Entity
@Table(name = "enrollment")
@Audited
public class Enrollment implements Serializable {
//...
@Column(name = "enrollment_status_id", nullable = false)
@NotNull
@Enumerated(EnumType.ORDINAL)
@Audited(withModifiedFlag = true, modifiedColumnName = "enrollment_status_id_modified")
private EnrollmentStatus status;

// getters setters etc
//...
}

希望这对其他陷入此困境的人有所帮助。

关于java - ENVERs 字段修改未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34600787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com