问题摘要:仅当使用Hibernate Envers更改特定字段时,才需要拍摄数据库行的快照。
使用的技术:< code>Spring Boot,< code>Spring Data JPA,< code > Hibernate en vers 5 . 2 . 10
当前行为:目前我运行Hibernate Envers,它审计对每个对象所做的表更改。
步骤1:用户表:当新用户注册时,最初帐户状态将是电子邮件验证待定
id user_name email_id phone_number account_status
-------------------------------------------------------------------------
101 test_user test@sample.com 123-123-1234 EMAIL_VERIFICATION_PENDING
用户审计表
id REV REVTYPE user_name email_id phone_number account_status
-----------------------------------------------------------------------------------
1 1 0 test_user test@sample.com 123-123-1234 EMAIL_VERIFICATION_PENDING
步骤2:用户表 电子邮件验证完成后,account_status更改为PHONE_VERIFICATION_PENDING
id user_name email_id phone_number account_status
-------------------------------------------------------------------------
101 test_user test@sample.com 123-123-1234 PHONE_VERIFICATION_PENDING
用户审核表如下所示
id REV REVTYPE user_name email_id phone_number account_status
-----------------------------------------------------------------------------------
1 1 0 test_user test@sample.com 123-123-1234 EMAIL_VERIFICATION_PENDING
2 2 1 test_user test@sample.com 123-123-1234 PHONE_VERIFICATION_PENDING
第 3 步:用户表:用户更改了电话号码
id user_name email_id phone_number account_status
-------------------------------------------------------------------------
101 test_user test@sample.com 111-222-3333 PHONE_VERIFICATION_PENDING
现在用户审核表如下所示
id REV REVTYPE user_name email_id phone_number account_status
-----------------------------------------------------------------------------------
1 1 0 test_user test@sample.com 123-123-1234 EMAIL_VERIFICATION_PENDING
2 2 1 test_user test@sample.com 123-123-1234 PHONE_VERIFICATION_PENDING
3 3 1 test_user test@sample.com 111-222-3333 PHONE_VERIFICATION_PENDING
第4步:用户表:当电话验证完成后,account_status更改为活动
id user_name email_id phone_number account_status
-------------------------------------------------------------------------
101 test_user test@sample.com 123-123-1234 ACTIVE
用户审计表如下所示
id REV REVTYPE user_name email_id phone_number account_status
-----------------------------------------------------------------------------------
1 1 0 test_user test@sample.com 123-123-1234 EMAIL_VERIFICATION_PENDING
2 2 1 test_user test@sample.com 123-123-1234 PHONE_VERIFICATION_PENDING
3 3 1 test_user test@sample.com 111-222-3333 PHONE_VERIFICATION_PENDING
4 4 1 test_user test@sample.com 111-222-3333 ACTIVE
注意:每当用户表发生任何更改时,Hibernate Envers都会创建新的修订版并在审核表中添加条目
试图实现:当帐户状态发生任何变化时,Hiberate Envers会创建新的版本。基本上,我想避免审计表中的修订号3。这意味着我不想审核电话号码的变更
是否有任何方法可以控制HiberNate Enver仅对特定字段级别的更改(如account_status)进行审核?
谁能帮我实现这一点的最佳方法。
有几种方法可以实现这一点。
如您所知,Envers附带了两个注释,< code>@Audited和< code>@NotAudited。
典型的规范用例是用户将@Audited
注释放在类级别,以指示Envers应该跟踪所有字段更改,并且它正是这样做的。
如果在这个用例中有一个字段您不想跟踪,您只需用另一个注释注释该字段,@NotAudited
,如下所示:
@Audited
@Entity
class User {
...
@NotAudited
private String phoneNumber;
}
当您对要跟踪的大多数字段更感兴趣时,这是一种从审计表中删除少量字段的超级简单的方法。但有时用户对反向方法感兴趣,只跟踪大多数不感兴趣的字段的子集。
在这种情况下,不注释类本身而是注释必须审计/跟踪的特定字段很有用,如下所示:
@Entity
class User {
private String phoneNumber;
@Audited
private UserStatus status;
}
在这种情况下,phoneNumber
不被审核,而状态
属性将被审核。
虽然您可以在实体的主键字段上放置@Aud的
注释,但这不是必需的。Enver无论如何都会自动获取并应用主键值,因此这也有助于避免这里过于冗长。
我是XSLT新手,希望能得到一些帮助。 我目前有一个XML,它包含以下格式的多个副本: 我的任务是替换id属性的值。我需要根据代码的数字部分改变这个值。如果值大于850000,格式应该改为USA868509。如果该值小于850000,则将id值更改为仅包括数字。XML中的其余值应保持完全相同。 我目前拥有以下xslt: 我很难确定要更改的值,因为XSLT不执行变量循环。有没有办法更改XSLT以获得
假设我有两个字段F1和f2。我想将F1更新为。我可以在Mongo中使用一个更新命令吗?
Java Checkstyle插件刚刚更新到6.0版本(Java8支持)。看来gradle用的是旧版本。我如何升级gradle checkstyle插件到更新的版本?
我有4个输入字段如下。名称,计数,金额,价格。和两个文本字段,佣金和总额。 如果用户输入价格和计数值,则应计算金额(价格*计数)。如果用户输入价格和金额值,则应计算计数(金额/价格)。在这两种情况下,佣金=0.02*金额和总额=金额佣金都应更新。 所以,我尝试了下面的代码片段作为根据价格更新金额和佣金的开始。但是它没有更新。 //应用程序。js //createCoins.jsx 你能推荐一下吗。
我想在我的中添加一种,当用户更改的值时,应用程序会在控制台上打印一些内容。 我搜索了一下,发现了以下非常类似的问题:将Listener值更改为JTextField 上述问题的答案非常清晰有效,但不幸的是,它只对(而不是)有用,因为它说您应该像这样使用DocumentListener: 但在JavaFX的文本字段中,您无法执行此操作。所以解决办法是什么? (用代码描述可能非常好,但如果不可能,任何提