我正在将修改的标志添加到已经存在的审计表中。正确填充了添加到表中的新修订的标志,但是我希望填充现有修订的标志。
我可以从程序上检查修订以进行更改并更新列,但是为每个表编写特定的过程将花费很多时间。
例如,这是我的user_aud
表中用户的数据,然后添加以下列:
id |rev |revtype|username |password
100 |51544|1 |pdacostaporto|420bed36a05fa4668b1baeff18ffce96
100 |46343|0 |pdacostaporto|286755fad04869ca523320acce0dc6a4
当我在withModifiedFlag
实体中将true
设置为User
时,
@Entity
@Audited(withModifiedFlag = true)
public class User {
// Attributes, getters and setters...
}
然后,Hibernate为标志添加列,但是在现有行上具有null
值,同时按预期在新修订版中工作:
id |rev |revtype|username |password |username_mod |password_mod
100 |60745|1 |pdacostaporto|4305664d643844973ccb52cbb7c369f8 |false |true
100 |51544|1 |pdacostaporto|420bed36a05fa4668b1baeff18ffce96 |null |null
100 |46343|0 |pdacostaporto|286755fad04869ca523320acce0dc6a4 |null |null
我想用正确的值填充已经存在的行的null
列,如下所示:
id |rev |revtype|username |password |username_mod |password_mod
100 |60745|1 |pdacostaporto|4305664d643844973ccb52cbb7c369f8 |false |true
100 |51544|1 |pdacostaporto|420bed36a05fa4668b1baeff18ffce96 |false |true
100 |46343|0 |pdacostaporto|286755fad04869ca523320acce0dc6a4 |false |false
答案 0 :(得分:0)
不幸的是,如果在表具有现有数据之后启用该功能,则Envers当前没有自动的方法来更新该功能的现有审核历史记录行;这是您必须手动执行的操作。
如果您决定手动执行此操作,请遵循以下逻辑:
REVTYPE=0
的行将始终具有等于_MOD
或true
的{{1}}列。我注意到您在原始问题中将它们设置为1
,这是不正确的,并且可能会导致查询问题。false
的行仅在data列的值与先前版本中同一列中的值不同时才设置为REVTYPE!=0
或true
。理想情况下,您应该能够利用数据库的元数据并编写一个脚本,该脚本将具有表名并执行所有必需的操作,而与表无关。