标签: hibernate-envers

hibernate envers:merge&saveOrUpdate

我正在开发一个spring-hibernate-envers应用程序.很多谷歌搜索后的东西终于为我工作,但我仍然有几个问题.

  1. 早些时候我saveOrUpdate用于保存或更新实体.但是当与envers合作时,它会抛出nonUniqueObject 异常.所以我使用了merge而且它有效.为此使用合并是否正确?是否merge将新对象插入db?

  2. 我试过以下代码:

entity=merge(entity);  
saveOrUpdate(entity);
Run Code Online (Sandbox Code Playgroud)

这也有效.这是正确的方法吗?而且我很好奇为什么saveOrUpdate现在不抛出任何错误.

java hibernate hibernate-envers

3
推荐指数
1
解决办法
6199
查看次数

在休眠环境中显示审计历史记录

我是 hibernate envers 的新手。我已成功为每个实体创建了审计表。但我不知道如何为每个实体读取这些历史记录。我想在 jsp 中显示此历史记录。我想阅读该特定的所有历史记录实体。任何机构都知道如何做到这一点。

hibernate-envers

3
推荐指数
1
解决办法
3920
查看次数

按修订日期查询 Hibernate Envers 修订版本

我已经开始使用 Hibernate Envers 来审计日志记录业务对象。我已阅读文档,并且从我看到的所有示例中,查询是通过修订号完成的。

我想按修订日期查询,即获取在特定日期或日期范围内发生的已审核实体的所有行。我这样的事可能吗?

我的 revinfo 表包含一个时间戳,所以我知道数据在那里。

hibernate hibernate-envers

3
推荐指数
2
解决办法
5537
查看次数

为什么Hibernate Envers忽略了我的自定义RevisionEntity?

我正在使用Spring 4.0.2开发一个使用JPA 2.1(由hibernate 4.2.11支持)的应用程序.我们使用Envers审核项目实体的变更.这工作正常.当我们尝试使用自定义修订实体作为Envers文档说:http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-revisionlog时出现问题

我们已经在文档中指出了一个自定义类和一个自定义监听器,但似乎Hibernate完全忽略了它们.自定义类:

@Entity
@RevisionEntity(AuditingRevisionListener.class)
public class AuditedRevisionEntity extends DefaultRevisionEntity {
  private String username;

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }    
}


public class AuditingRevisionListener implements RevisionListener {
  private static Log log = LogFactory.getLog(AuditingRevisionListener.class.getName());

  @Override
  public void newRevision(Object revisionEntity) {
    AuditedRevisionEntity revEntity = (AuditedRevisionEntity) revisionEntity;
    String userName = SecurityContextHolder.getContext().getAuthentication().getName();
    revEntity.setUsername(userName);
  }

}
Run Code Online (Sandbox Code Playgroud)

就像hibernate没有考虑这个类一样,因为它应该足以让它使用注释:@RevisionEntity(AuditingRevisionListener.class).其他带注释的实体已得到很好的认可,但这只是被忽略了.我们在spring config中(我们不使用persistence.xml)在加载spring上下文时要扫描的基础包:

  <context:component-scan base-package="our.basepackage" />
Run Code Online (Sandbox Code Playgroud)

这够了吗?

我们还尝试了另一种方法.在EntityManagerFactory配置中使用此属性手动设置修订侦听器

    <prop key="org.hibernate.envers.revision_listener">our.basepackage.AuditingRevisionListener</prop>
Run Code Online (Sandbox Code Playgroud)

但是我们在newRevision方法的第一行得到了classcastexception,因为参数revisionEntity不是AuditedRevisionEntity类.再次就像没有加载AuditedRevisionEntity类.

我提出这是一个简单的问题,但我无法猜测为什么@RevisionEntity注释被忽略了.任何的想法?

java spring jpa hibernate-envers

3
推荐指数
1
解决办法
3599
查看次数

扩展Hibernate Envers的实现

我有2个Maven项目在各自的POM中共享一个JPA项目作为依赖项。JPA项目在2.1版上,并且成功实现了休眠envers。但是,现在我需要创建一个自定义的RevisionEntity,因为我需要审核其他属性,例如登录的用户ID。问题是:

一世。我不能在JPA项目中直接实现

ii。父maven项目的检索登录用户的实现不同。

真正的挑战实际上是实现RevisionListener。我尝试在JPA项目本身中创建一个抽象类的修订侦听器,可以在每个父Maven项目中扩展和实现它。大声笑!这没用!

无论如何,我将不胜感激。有出路吗?

hibernate hibernate-envers

3
推荐指数
1
解决办法
967
查看次数

Hibernate Envers - 按ID获取实体的所有实体,修订号,修订日期和修订类型

使用Hibernate Envers我希望通过其ID获取实体的所有实体,修订号,修订日期修订类型.

目前我这样做是为了获取实体,修订号和修订日期:

public List<Alumno> obtenerAuditoriaAlumno(Long idAlumno) {

   AuditReader auditReader = AuditReaderFactory.get(entityManager);
   List<Number> revisionNumbers = auditReader.getRevisions(Alumno.class, idAlumno);

   List<Alumno> auditoriaAlumno = new ArrayList<Alumno>();

   for (Number rev : revisionNumbers) {
      Alumno alumno = auditReader.find(Alumno.class, idAlumno, rev);
      Date revisionDate = auditReader.getRevisionDate(rev);

      alumno.setRevisionNumber(rev.intValue());
      //alumno.setRevisionType(revisionType); // GET THIS
      alumno.setRevisionDate(revisionDate);
      auditoriaAlumno.add(alumno);
  }
return auditoriaAlumno;
}
Run Code Online (Sandbox Code Playgroud)

是否可以通过一个查询获得它?

我应该将这些字段直接添加到实体吗?

hibernate-envers

3
推荐指数
1
解决办法
2274
查看次数

Hibernate Envers 无法删除实体

我现在真的有一个奇怪的问题。

我只想删除一个实体。

我也在使用 Hibernate envers 进行审计。所以现在我想删除这个实体。

现在我收到以下消息。

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“成功”不能为空

因此,当我@Audit突然从表中删除时,我能够删除该实体。

现在我去了我的 entity_aud 表并取消选择 NOT NULL 属性成功。然后我也再次放在@Audit我的桌子上方。

现在它起作用了。那么为什么如果我只想删除一个实体,我在使用 Hibernate Envers 时会收到 NOT NULL 错误。

这是什么原因。

jpa hibernate-envers

3
推荐指数
1
解决办法
1827
查看次数

在Hibernate Envers查找方法期间的nullpointerexception

我没有使用envers很长时间,我遇到了一个问题,我似乎无法找到任何地方的答案.我试过谷歌搜索堆栈跟踪,但无济于事,所以我必须错过一些令人目眩的明显.每当我尝试在org.hibernate.envers.AuditReader中运行'find(class,versionNumber)'方法时,我似乎得到以下堆栈跟踪,以便在数据库中检索以前版本的Document类:

java.lang.NullPointerException
org.hibernate.envers.entities.EntityInstantiator.createInstanceFromVersionsEntity(EntityInstantiator.java:91)
org.hibernate.envers.entities.EntityInstantiator.addInstancesFromVersionsEntities(EntityInstantiator.java:113)
org.hibernate.envers.query.impl.EntitiesAtRevisionQuery.list(EntitiesAtRevisionQuery.java:110)
org.hibernate.envers.query.impl.AbstractAuditQuery.getSingleResult(AbstractAuditQuery.java:108)
org.hibernate.envers.reader.AuditReaderImpl.find(AuditReaderImpl.java:119)
org.hibernate.envers.reader.AuditReaderImpl.find(AuditReaderImpl.java:94)
com.example.repository.AbstractDocumentTypeManager.getVersion(AbstractDocumentTypeManager.java:221)
com.example.repository.AbstractDocumentTypeManager.getVersion(AbstractDocumentTypeManager.java:1)
com.example.logic.versioning.BaseVersioningService.getApprovedSnapshot(BaseVersioningService.java:54)
com.example.logic.versioning.BaseVersioningService$$FastClassByCGLIB$$d33887d.invoke(<generated>)
net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
...
Run Code Online (Sandbox Code Playgroud)

导致此错误的代码如下.它发生在我的文档保存后,似乎在数据库中创建了适当的版本(document_AUD).

public Document getVersion(String objectId, Number version) {
    AuditReader auditReader = getAuditReader();
    /* at this point, i guarantee that neither objectId nor version are null. */
    Document revision = auditReader.find(Document.class, objectId, version);
    return revision;
}

public AuditReader getAuditReader() {
    return AuditReaderFactory.get(entityManager);
}
Run Code Online (Sandbox Code Playgroud)

我的'文档'类注释如此......

@Entity(name = "document")
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING)
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
@Cacheable(true)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "modelObjectCache")
public abstract class Document<T …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernate-envers

2
推荐指数
1
解决办法
1834
查看次数

Hibernate Envers:检索修订类型已删除的条目

AuditQuery query = auditReader.createQuery()
                     .forRevisionsOfEntity(AB.class, false, true)
                     .add(AuditEntity.property("bId").eq(bId))
                     .addOrder(AuditEntity.revisionNumber().desc());
Run Code Online (Sandbox Code Playgroud)

上面的代码检索所有修改除了RevType DEL修订版bIdnull.

我有三个表A,BAB.ABtable是一个关系表.所以AB表中有abID作为PK,和aId,bID修订信息.每当B删除时,它都会更新AB_AUDv table with revtypeDEL and keeps援助,出价asnull`.

要显示已删除的内容B,是否有人可以通过修改后的审核查询器建议我?

hibernate-envers

2
推荐指数
1
解决办法
2828
查看次数

基础模型与@Audited

我使用@Audited annotation作为我的基本模型.我为所有实体扩展了它.但它不起作用.有什么方法我可以使用它

这是我的基本模型

@MappedSuperclass
@Getter
@Setter
@Audited 
public abstract class BaseModelObject implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 4194525198831057382L;


    @Id     
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    protected Long id;
}
Run Code Online (Sandbox Code Playgroud)

这是我的模特课

@Entity
public class City extends BaseModelObject {

    private static final long serialVersionUID = 1L;

    @Column
    private String name;
 }
Run Code Online (Sandbox Code Playgroud)

spring hibernate hibernate-envers spring-boot

2
推荐指数
1
解决办法
3678
查看次数

标签 统计

hibernate-envers ×10

hibernate ×5

java ×3

jpa ×2

spring ×2

spring-boot ×1