标签: hibernate-envers

jboss 7(envers 4)无法加载类org.hibernate.envers.event.AuditEventListener

我从hibernate Envers 3.6移植到Envers 4.0.此新版本没有AuditEventListener.旧版本需要:听众

我找不到如何配置新版本.

jboss hibernate-envers

5
推荐指数
1
解决办法
8118
查看次数

java中的审计和数据历史记录

我有一组域对象及其相关的表,用于应用程序的配置.经过身份验证的用户可以通过表示层更改这些域对象数据.这些 域对象具有非常重要的数据,我需要找到谁和何时更改了他们的数据.我的应用程序的数据访问层是使用JPA,Hibernate和Spring实现的.我需要记录每个更改,包括:用户+操作日期+操作类型+以前的值.

例如,让我们考虑一个简单的域对象(为了这个问题的目的简化):

@Entity
class Connection
{
   private Long id;
   private String name;
   private String protocol;
}
Run Code Online (Sandbox Code Playgroud)

假设有一个Connection具有以下值的实例:

Connection 
    id = 1;
    name = Web;
    protocol = HTTPS;
Run Code Online (Sandbox Code Playgroud)

在用户(例如John)登录UI并将此连接更改为以下值之后:

Connection
    id = 1;
    name = Web;
    protocol = HTTP;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,John将协议更改HTTPSHTTP(安全协议不安全!),因此我需要将Connection实例的历史记录保存在另一个表中以便进行审计.

我为我研究了一个解决方案,并找到了以下结果:

  1. 触发器:一种可能性是在表上定义触发器,这种方式的缺点是对数据库的依赖.
  2. Hibernate Envers:这个解决方案很好但是让我的DAO层依赖于Hibernate而且我不会受益于JPA及其提供者的独立性.
  3. 春季数据共享+阎王:是好的,但通过添加了一些列的任何实体MappedSuperClass注释,如:Create User,Create Date,Last Update User …

java hibernate auditing hibernate-envers revision-history

5
推荐指数
1
解决办法
2246
查看次数

使用Envers和Hibernate Spatial 4进行审计

我正在尝试使用Envers在我的Hibernate实体上设置审核.但是,我收到错误:

无法确定类型:几何,在表:Location_AUD,对于列:[org.hibernate.mapping.Column(geom)]

Hibernate很满意我在没有审核的情况下使用的几何类型,但是Envers似乎遇到了麻烦.

有谁知道Envers是否适用于Hibernate Spatial 4?如果是这样,也许有人可以用我的代码发现问题.

@Audited
@Entity
public class Location {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_LOCATION")
    @SequenceGenerator(name = "SEQ_LOCATION", sequenceName = "SEQ_LOCATION", allocationSize = 1)
    Long id;

    @Type(type = "org.hibernate.spatial.GeometryType")
    Geometry geom;

    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Hibernate 4.2.5和HibernateSpatial 4.0.0 M1

java hibernate auditing hibernate-envers hibernate-spatial

5
推荐指数
1
解决办法
1052
查看次数

使用 hibernate envers 在审计表中添加附加列

是否可以在审计表中添加额外的列?例如我有一张这样的桌子

@Entity
@Table(name="EmpEnverPrac")
@Audited
public class EmpEnverPractice {


        @Id
        @Column(name="ID") 
        @GeneratedValue(strategy  = GenerationType.AUTO)
        private Integer id; 

        @Column(name="NAME") 
        private String name; 

        @Column(name="password")
        @NotAudited
        private String password; 

     // getter and setters

}
Run Code Online (Sandbox Code Playgroud)

现在我想在生成的审计表中添加一些额外的列,但我不想将它们包含在我的实体中。我无法找到满足此要求的任何解决方案。请告诉我所需的配置。提前致谢

hibernate hibernate-envers

5
推荐指数
1
解决办法
4554
查看次数

Hibernate Envers rev 列数据类型为整数

我在我的应用程序中使用 Hibernate Envers 来存储审计跟踪数据,所有与审计相关的信息都正确存储在 *_AUD 表中。但是,所有_AUD表中rev列的数据类型都是Integer数据类型。我期待一个 big int 数据类型,因为 integer 数据类型的最大范围是 2147483647。有没有办法将数据类型更改为 big int?

hibernate-envers

5
推荐指数
1
解决办法
2008
查看次数

Hibernate Envers - 显示修订之间的差异

跟进这三个主题:

  1. 使用 Hibernate Envers 在两个修订版之间获取旧值和新值
  2. 休眠环境修订的差异
  3. Hibernate Envers:如何检查字段在两次修订之间是否发生了变化?

我正在寻找一种解决方案来比较和显示两个实体修订版之间的差异(添加/编辑/删除的内容)。

假设我有如下实体:

@Entity
@Table(name = "MAIN_ENTITY")
@Audited
public class MainEntity implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "SHORT_NAME")
    private String shortName;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "MAIN_ENTITY_COUNTER_ID")
    private MainEntityCounter mainEntityCounter;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "mainEntity", fetch = FetchType.LAZY, orphanRemoval = true)
    @JsonManagedReference
    @OrderBy
    private Set<Tag> tags = new HashSet<Tag>();

    // getters …
Run Code Online (Sandbox Code Playgroud)

tree hibernate compare hibernate-envers difference

5
推荐指数
1
解决办法
1926
查看次数

Hibernate Envers:仅获取更改的字段

我怎样才能只从被审计实体获取修改过的字段?

当我使用

AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(MyEntity.class, revisionNumber).getResultList()
Run Code Online (Sandbox Code Playgroud)

我得到了所有领域;但我只想修改字段?

java hibernate hibernate-envers revision-history

5
推荐指数
1
解决办法
6577
查看次数

Hibernate Envers:发生断言失败(这可能表示Hibernate中的错误,但更可能是由于不安全地使用会话)

在我的Java应用程序中,我正在使用Hibernate Envers监听持久事件。我的侦听器类如下所示。

@Component
public class DataCreationListener extends EnversPostInsertEventListenerImpl {

    private static final long serialVersionUID = 1L;

    @Autowired
    DataService DataService;

    public DataCreationListener() {
        super(null);
    }

    @Override
    public void onPostInsert(PostInsertEvent event) {

        if (event.getEntity() instanceof DataDAO) {
            Data Data = DataService.fromDao((DataDAO) event.getEntity());
            // other stuff
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

在该fromDAO方法中,我将DAO(实体类型)对象转换为api类型对象。这是fromDAO方法

@Override
    public Data fromDao(DataDAO data) {
        if (data == null) {
            return null;
        }
        Data api = new Data();
        api.setId(data.getIdUser());
        api.setAddress(data.getAddress());
        api.setCity(data.getCity());
        api.setCountry(getCountryFromId(data.getId()));

        return api;
    }
Run Code Online (Sandbox Code Playgroud)

执行时发生错误 …

java hibernate jpa hibernate-envers

5
推荐指数
1
解决办法
6574
查看次数

Javers - 使用 Javers 代替 Envers 有什么优势?

我正在使用 Spring Data REST 开发 RESTful API。现在进行审计,Spring 确实可以选择审计元数据created_datemodified_date但它们不提供实体版本控制。

目前有两个流行的实体版本库,分别是 Envers 和 Javers。我已经查看了两者的比较,但没有关于这个问题的任何文章。

那么使用 Javers 而不使用 Envers 有哪些优点和缺点呢?

spring auditing hibernate-envers spring-data-rest javers

5
推荐指数
1
解决办法
5240
查看次数

测试 Hibernate Envers

我想写关于修订的测试。在控制台中,我看到 Hibernate 的更新调用,但没有插入 AUD-Table。

测试方法:

@DataJpaTest
class JPAHistoryTest {

    @Test
    public void test() {
        def entity = // create Entity
        def entity2 = // create same Entity
        entity2.setPrice(entity2.getPrice() + 10)
        entity2.setLastUpdate(entity2.lastUpdate.plusSeconds(10))

        service.save(entity)
        service.save(entity2)
        repository.flush() // Hibernate updates changes

        assert repository.findRevisions(entity.id).content.empty == false // FAIL!
    }
}
Run Code Online (Sandbox Code Playgroud)

我的实体看起来像:

@Entity
@Audited
class Entity {
    @Id @GeneratedValue Long id
    @Column(nullable = false) BigDecimal price
}
Run Code Online (Sandbox Code Playgroud)

非常感谢。

testing junit hibernate hibernate-envers

5
推荐指数
2
解决办法
2913
查看次数