有没有办法将修订版直接添加到_AUD表中作为历史修订版?
据我所知,当实体被持久化时,envers会在_AUD表中创建修订记录,并将当前记录保留在实体表中。假设我想添加历史修订而不影响实体表,这可能吗?
例如,我有一个人实体
PERSON
ID | NAME
1 | SMITH
PERSON_AUD
ID | REV | REVTYPE | NAME
1 | 1 | 0 | SMITH
我想在PERSON_AUD中添加以下内容,而不修改PERSON表,因为SMITH是当前姓名。
PERSON_AUD
ID | REV | REVTYPE | NAME
1 | 1 | 0 | SMITH
1 | 2 | 2 | JONES
您似乎忘记或没有意识到修订号是全局的;它在一个单独的表中进行跟踪,在默认设置中称为REVINFO
。修订号的每个条目都附有时间戳。插入不是自然创建的历史数据是完全错误的(甚至可能成为严重的情况,具体取决于环境)。
如果您仍然想这样做,可以使用本机SQL来执行此操作,方法是首先在REVINFO中创建修订条目,然后在审计表中使用它。这是错误的。
我的背景是C#,但是因为Java的框架更强大(至少我是这样认为的),我确信你会找到相关的方法。
1)将实体重新附加到会话将创建一个新的修订版:
private void Reattach(Person person)
{
_sessionContainer.Session.Transaction.Begin();
_sessionContainer.Session.Evict(person);
_sessionContainer.Session.Update(person);
_sessionContainer.Session.Flush();
_sessionContainer.Session.Transaction.Commit();
}
2) 如果要操纵审核条目,则需要附加侦听器(在本例中为预更新):
configuration.AppendListeners(ListenerType.PreUpdate, new object[] { new PreUpdateListener() });
实现正在发挥魔力的地方:
public class PreUpdateListener : IPreUpdateEventListener
{
public bool OnPreUpdate(PreUpdateEvent ev)
{
var person = ev.Entity as Person;
if (person != null)
{
person.Name = "Jones";
}
return true;
}
}
请让我知道这种方法是否适合您。
恐怕这在当前的Envers API中是不可能的。
任何push到open-falcon中的数据,事后都可以通过api组件提供的restAPI,来查询得到。 具体请参考API文档
历史 本书改编和包含了以下两本书的部分章节,这两本书均以GNU Free Documentation License发布。 How To Think Like A Computer Scientist: Learning with C++ 作者Allen B. Downey。原书由Green Tea Press发行,可以从http://www.greenteapress.com/下载到。 Prog
大部分1980年前的 Unix 竞争者都被拴到单个硬件平台上,随着这个硬件的消亡而消亡。为什么 VMS 可以坚持这么久?值得我们作为案例研究一个原因是:VMS 成功地从最初的 VAX 硬件移植到了 Alpha 处理器(2003年正从 Alpha 移植到 Itanium 上)。MacOS 也在1980年代后期成功完成了从摩托罗拉68000到 PowerPC 芯片的迁跃。微软的 Windows 处在计
同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。 Linux 内核开源项目有着为数众广的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper 的商业公司同 Linux
任何push到open-falcon中的数据,事后都可以通过api组件提供的restAPI,来查询得到。 具体请参考API文档
Cassandra最初由Facebook的两名印度人Avinash Lakshman(亚马逊Dynamo的作者之一)和Prashant Malik共同开发。 它被开发用于为Facebook收件箱搜索功能提供支持。 以下是Cassandra历史上最重要的几个事件: Cassandra在Facebook由Avinash Lakshman和Prashant Malik开发。 它是为Facebook收件箱