问题标签 [hibernate-envers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hibernate - 休眠环境不工作
我只想使用 hibernate envers 来审计我的实体。我正在使用 envers-1.2.2.ga-hibernate-3.3.jar,hibernate-annotations-3.5.6-Final.jar,hibernate-core-3.5.2 -Final.jar 和 hibernate-jpa-2.0-api-1.0.0.Final.jar。
我的实体在下面
用户.java
这是我配置环境的应用程序上下文
应用程序上下文.xml
执行应用程序时没有错误,但在添加或删除用户时也没有创建审计表。我需要做任何其他配置吗?
更新
我明白了,我只是像这样编辑我的应用程序上下文
应用程序上下文.xml
谢谢你的支持
hibernate-envers - 在休眠环境中显示审计历史
我是hibernate envers的新手。我已经成功地为每个实体创建了审计表。但我不知道如何为每个实体读取这些历史记录。我想在jsp中显示这个历史记录。我想阅读那个特定的所有历史记录entity.any 机构都知道如何做到这一点。
java - Hibernate Envers 审计 - 'delete' 没有被审计,在 'add' 许多 'edit' 记录被添加之后
我们有一个实体('Something'),它的 ManyToOne 映射到 'ListOfSomething' 和 'SomethingSource'。我们用@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 标记了ManyToOne 关联字段。
删除实体后,Something_Aud 表中不会创建任何记录。添加实体后 - 一些记录被添加到 Something_Aud 表中:单个“添加”记录,以及与匹配 ListOfSomething 中的实体数量一样多的“编辑”记录。
我们做错了什么?如果需要,将很乐意提供更多信息。
hibernate - Hibernate envers, post-delete 事件抛出约束冲突异常
项目使用 Hibernate 3.5、Spring Webflow 2 和 Hibernate Envers 进行审计。Envers 在 hibernate.cfg.xml 中配置。我在实体“ArticleGroup”和“Article”之间有一对多的关系映射。表 'articles' 有一个外键 'article_group_id' 引用表 'article_groups' 中的 id。在前端,当我删除一篇文章时,Hibernate Envers 会为 post-delete 事件抛出约束冲突异常。如果我不使用 Envers,删除操作可以正常工作。两个实体定义如下
文章删除编码如下:
约束违反异常:
如您所见,当 Envers 插入表“audit.articles_AUD”时,article_group_id 为空,导致违反约束。有人知道如何解决吗?非常感谢。
java - envers:获取引用未审计实体的审计实体
我在尝试让经审计的实体引用未经审计的实体时遇到问题。在我们的应用程序中,某些实体是在不使用休眠的情况下引导的,这些实体是我们的元模型,不需要审计。
工作示例:
如果我执行代码:
一切顺利,但是如果我尝试获取 B 的版本,则会发生错误:
org.hibernate.ObjectNotFoundException:不存在具有给定标识符的行 [metafoo]
Envers 通过对我的 metafoo 实体的惰性引用成功地查找了 B 实体。但是,当尝试将其存储在其缓存中时,我的 B 实体的 hashcode 方法被调用,这反过来会查找审计表中不存在的 metafoo,从而引发异常。
有没有办法可以忽略那些不存在的引用而不是抛出这个错误?(也许通过在查询中排除此类引用)
如何完全处理不存在的数据(假设我们从审计表中删除了所有超过 1 个月的条目)我们如何仍然查询引用不存在的实体?
PS:
如果可能,我不想修改哈希码函数
我不想审核我的元模型
表结构:
表一:
表 A_AUD:
表 B:
表 B_AUD:
堆栈跟踪:
编辑:
我发现这篇文章很有趣,但它并没有解决问题,因为我的参考是 A 类型,所以注释 @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 不起作用。
hibernate - Hibernate Envers:如何从我的审计表中删除条目?
这个问题已经在这里讨论过,但是,它并没有解决我的问题。
让我们有一个简单的审计类 Person ,其中包含一些字符串信息,如姓名等,以及字符串电子邮件地址列表。现在我想从数据库中删除特定的人及其所有修订。我知道,这不是 Envers 的常见用例,但它对我的项目至关重要。我明白,我可以使用这样的东西:
“从 full.package.name.Person_AUD 中删除 u.originalId.id = :personid”
但是,这不会删除电子邮件表中与此人相关的记录,因为这种关系没有限制。还是我做错了什么?
我也在考虑从 REVINFO 表中删除记录(审计表中存在关于与 REVINFO 表的关系的约束),但这并不安全,因为在一个事务中可以修改更多实体,因此更多实体可能具有相同的修订号.
我的问题是:是否有任何简单的方法可以从任何人的所有审计表中删除所有记录?
hibernate-envers - 如果我只想保留已删除的实体,我可以使用 Hibernate Envers 吗?
现在我们不删除实体,而是在表中设置一个标志为“非活动”(并将这些实体过滤掉以进行正常操作)。有人将我指向 Hibernate Envers,但对我来说它看起来有点矫枉过正。我的问题是:
- 我们可以使用 Envers 来执行我们的机制(活动/非活动标志)吗?
- 如果没有,Envers 是否可以将已删除实体的副本存储在存档表中,但不执行任何版本控制/审计工作?
- 这项任务是否有轻量级的替代方案?
java - JPA:将上次更新时间存储在单独的表中
我正在使用 jpa 和休眠,我正在尝试存储 JPA 管理的每个项目的创建/更新/删除时间。
我需要像 Hibernate Envers 这样的东西,但只存储最后一次,而不是所有修订,我想将该数据存储在单独的表中(因为这些数据不是项目本身的一部分,而是属于需要的可选同步过程知道每个项目的最后修改时间)。
现在我可以使用 jpa @EntityListeners 捕获所有事件,但现在我不知道如何将这些信息保存到数据库表中。我不想定义 item_history 表实体,而是像 envers 那样在运行时生成和访问它们。
那可能吗 ?
hibernate - Hibernate Envers:如何获取给定修订版和给定实体类的修订类型信息
我正在使用 Hibernate envers 3.6.3.Final。我可以审计表,我可以看到_audit
表中填充了revision_number
,revision_type
和实体数据。我正在创建一个历史页面,我想在其中显示所有修订条目,以便当用户单击修订 ID 时,我可以显示实体数据以及修订类型,即添加、删除或修改。我正在尝试使用AuditQuery
,但我不确定如何获取revision_type
给定修订版和给定实体类的信息。有可能在AuditQuery
吗?
我可以通过编写 Hibernate 查询来获取“RevisionType”信息。但我想为此重用任何现有的框架 api。以另一种方式,我将不同的“RevisionType”作为条件传递给AuditQuery
(即删除、插入和更新的多个查询)并检查是否得到任何结果,但这不是有效的方法。
maven - Maven Hibernate 和 Envers - 依赖项
我在使用 Envers 时遇到了依赖问题。
在 Envers 世界的某个地方,存在对 class 的依赖org.hibernate.integrator.spi.Integrator
。这可以在hibernate-core.4.1.7.Final
但是,如果我使用,hibernate-core.4.1.7.Final
那么我会遇到一个依赖问题 ( NoClassDefFoundError
) org.hibernate.event.PreCollectionUpdateEventListener
,可以在hibernate-core.3.6.10.Final
.
所以我有点吃不消,因为 Maven 不会将这两个版本都放在类路径中。
任何有解决方案/想法/解决方案的聪明人。
谢谢亚当
更新: 感谢@adamw 的回复,但这不起作用。让我更深入地了解我所做的事情:
build.xml:
然后在我的实体代码中输入:
现在,当我运行集成测试时,不会创建 _AUD 表。
因此,我将其添加到persistance.xml
文件中(按照此处的说明):
然后我得到一个 Spring 错误,导致:
那么我该如何解决这个问题?其他人在使用 Spring、Envers 和 Maven 时有这个问题吗?
哦,顺便说一句。代码段中指定的侦听properties.xml
器在任何一个 jar 文件依赖项中都不存在。