【问题标题】:hibernate envers and ordered lists休眠环境和有序列表
【发布时间】:2012-12-06 20:34:09
【问题描述】:

一段时间以来,我一直非常愉快地使用 Hibernate Envers 3.6。 但是,我遇到了有序列表的问题,这似乎会导致 Envers 失败。

我们有一个类 A 和一个 B 列表,在 例如,在 A 类中

  @OneToMany(mappedBy = "A", cascade = CascadeType.ALL, orphanRemoval = true)
public List<B> getB() {
    return this.B;
}

当我检索一个修订版时,我加载了适当的 A 实例,然后显式初始化 B 的集合:例如,

for (B b: rvision.getB()){
   b.getClass();// init  fields
}

虽然最近我们需要在 getB() 方法上添加一个 'orderColumn' 注释,以确保数据库中列表的顺序一致。

例如,

@OneToMany(mappedBy = "A", cascade = CascadeType.ALL, orphanRemoval = true)
 @OrderColumn(name="columnIndex")
    public List<B> getB() {
        return this.B;
    }

这完全破坏了 Envers 中的集合初始化,失败并出现空指针异常:

java.lang.NullPointerException
at org.hibernate.envers.entities.mapper.relation.lazy.initializor.ListCollectionInitializor.addToCollection(ListCollectionInitializor.java:81)
at org.hibernate.envers.entities.mapper.relation.lazy.initializor.ListCollectionInitializor.addToCollection(ListCollectionInitializor.java:39)
at org.hibernate.envers.entities.mapper.relation.lazy.initializor.AbstractCollectionInitializor.initialize(AbstractCollectionInitializor.java:67)
at org.hibernate.envers.entities.mapper.relation.lazy.proxy.CollectionProxy.checkInit(CollectionProxy.java:50)
at org.hibernate.envers.entities.mapper.relation.lazy.proxy.CollectionProxy.size(CollectionProxy.java:55)
etc....

我们已将其隔离为单元测试;切换 OrderColumn 注释足以导致此问题。 OrderColumn 在常规 Hibernate 中运行良好。

问题似乎源于 org.hibernate.envers.entities.mapper.relation.component.MiddleSimpleComponentMapper 的第 47 行:

 return ((Map<String, Object>) data.get(verEntCfg.getOriginalIdPropName())).get(propertyName);

基本上,它正在寻找的“propertyName”被称为“mapKey”,并且当它不应该查找时,它会返回 null。这不是我的对象的属性,所以它必须是一些内部 Envers 属性。

如果有人知道发生了什么,我将不胜感激! 谢谢 理查德

【问题讨论】:

标签: hibernate lazy-loading hibernate-envers


【解决方案1】:

我们在 Hibernate Envers 4.x 中遇到了这个问题。我们的解决方案是使用 @AuditMappedBy 注释来识别 Envers 的订单列。如示例here 所示,需要将订单列的值映射到被引用实体上的字段中才能使其正常工作。

【讨论】:

    【解决方案2】:

    几周前我遇到了同样的问题。

    我刚刚添加了 Envers 正在寻找的 @MapKey 注释,到目前为止我还没有看到任何进一步的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-18
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2016-05-27
      • 2016-03-31
      相关资源
      最近更新 更多