hibernate 试镜为一个表中的多个插入生成相同的 rev id

问题描述 投票:0回答:2

我正在使用 Hibernate Auditions 和 Hibernate 版本 3.5。虽然当我尝试在一个事务中在一个表中插入单个记录时它工作正常,但问题是当“BATCH”运行时 它会在单个事务中将多条记录插入一个表中,然后为审计表生成single“rev id”,这会导致“integrityconstraintsviolation”。

由于 Hibernate 的正常行为,所有插入查询都会在 tansaction 结束时触发(当它刷新时),但此时只有一个查询被触发以生成“rev id”。

 select hibernate_sequence.nextval from dual;

请告诉我这是审核中的错误还是我遗漏了什么? 预先感谢

java hibernate audit
2个回答
1
投票

revid 始终跨越多个表中的修改!

是的,插入是在事务结束时调用的,但是:如果使用乐观事务隔离,事务可以读取当前活动但尚未提交的另一个事务的未提交状态。

如果您违反了完整性约束,则

rev_id
列不幸被配置为“唯一”。这是错误的数据库模式!通过删除列的唯一性来更正架构
rev_id

全局休眠关系表中的

rev_id
必须是唯一的,因为它是主键! (全局休眠关系表通常还包含时间戳)。


0
投票

不确定您是否仍然遇到这个问题:)。就我而言,我遇到了同样的问题,解决方案是在“rev”和“id”列上设置审核表复合主键。 下面是 Liquibase 脚本示例:

<addPrimaryKey
    columnNames="id, rev"
    constraintName="t_order_aud_pk"
    tableName="t_order_aud"/>
© www.soinside.com 2019 - 2024. All rights reserved.