Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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
Java 创建历史事件_Java_Spring_Hibernate - Fatal编程技术网

Java 创建历史事件

Java 创建历史事件,java,spring,hibernate,Java,Spring,Hibernate,我有一个spring+JPA项目 我希望创建事件条目并将其保存在表中,例如: a) id为4的实体“User”已更改:在名为“userName”的属性中oldValue:“john”newValue:“johnnie” b) 收到了一封新的客户电子邮件,因此我们为这封电子邮件创建了一张新的票证,并且这封电子邮件的收件人是名为“小悟空”的用户 我的问题是: 创建这种机制的最佳实践是什么?目前我有两个想法还不够: 1) 我可以在我要创建历史事件的代码中的每个位置插入以下代码: historyMana

我有一个spring+JPA项目

我希望创建事件条目并将其保存在表中,例如:

a) id为4的实体“User”已更改:在名为“userName”的属性中oldValue:“john”newValue:“johnnie”

b) 收到了一封新的客户电子邮件,因此我们为这封电子邮件创建了一张新的票证,并且这封电子邮件的收件人是名为“小悟空”的用户

我的问题是:

创建这种机制的最佳实践是什么?目前我有两个想法还不够:

1) 我可以在我要创建历史事件的代码中的每个位置插入以下代码:

historyManager.createEvent(String event string,String newValue, String oldValue, Date date);
尽管这个解决方案有效,但它非常丑陋,根本不是通用的

2) 使用Hibernate Envers,这个库实际上用简单的注释记录我项目中的每个实体更改:“@Audited”
问题是这个解决方案会影响性能,老实说,对我来说不是很有吸引力。

我会选择Envers方法。如果性能真的成为一个问题,那么您可以通过不同的方法来解决它。例如,通过对数据进行分区,通过使用特殊的“引擎”(对于MySQL),将数据存储在不同的模式/目录中。。。你几乎是“免费”得到的,特别是与你自己做任何事情的选择相比

我真的很想避开这个envers图书馆有什么具体的理由来避开它吗?性能不是真正的问题,特别是如果您尚未测量影响;-)1) 我们的CTO以前用过它,对它的一切都恨之入骨。2) 如果一个人不使用hibernate,他会做什么?点1不是真正的目标,并且只有当您不打算使用JPA(或hibernate)时,第2点才有效。但是,我不明白你为什么在你的问题中提到Envers作为一个选项,唯一具体的消极方面是“性能”(这不是一个问题,IMO)。