gpt4 book ai didi

java - NullPointerException 在 org.hibernate.envers.event.AuditEventListener.generateBi DirectionCollectionChangeWorkUnits(...)

转载 作者:行者123 更新时间:2023-12-01 07:42:41 24 4
gpt4 key购买 nike

我正在使用 Envers 来审核我的实体的不同字段。该框架总体工作正常,但似乎在某些类型的实体映射方面存在问题。以前的所有问题我都可以自己解决...但这次我陷入了困境。

将某些实体插入数据库时​​,出现以下异常:

Caused by: java.lang.NullPointerException
at org.hibernate.envers.event.AuditEventListener.generateBidirectionalCollectionChangeWorkUnits(AuditEventListener.java:108)

我不完全确定哪个实体导致了这种情况,因为它是在flush()期间触发的,并且复杂的应用程序在一个较大的事务中插入了许多不同的实体。

我们正在使用一些在该异常之前触发的 HibernateEventListener...所以我认为该实体是原因。 persistence.xml 的配置方式如下:

        <property name="hibernate.ejb.event.post-insert" value="com.xyz.hibernate.events.listeners.MyListener,org.hibernate.envers.event.AuditEventListener" />

如果这是真的,则实体如下(摘录):

@Entity
@Table(name = Property.TABLE_NAME, uniqueConstraints = @UniqueConstraint(columnNames = { "ENTITY_ID", "DESCRIPTOR_ID", "PROMOLEVEL_ID" }))
public class Property extends AbstractEntity {
private static final long serialVersionUID = 1L;

public static final String TABLE_NAME = "E_BUSINESS_PROPERTIES";
public static final String PROPERTY_ENTITY = "entity";
public static final String PROPERTY_DESCRIPTOR = "descriptor";
public static final String PROPERTY_PROMOLEVEL = "promolevel";

@Audited
@ManyToOne(optional = false)
private ProjectPropertyDescriptor descriptor;

@Audited
@ManyToOne
private ExtendedEntity entity;

@Audited
@ManyToOne
private AbstractPromotionLevel promolevel;

@Audited
@OneToMany(cascade = { CascadeType.ALL }, mappedBy = PropertyValue.PROPERTY_PROPERTY)
private List<PropertyValue> propertyValues = new ArrayList<PropertyValue>();

// some accessors stripped!

}

有人知道去哪里寻找吗?一旦我们禁用恩弗斯,一切就正常了。但我们需要 envers 来生成变化的历史。

最佳答案

我找到了问题的解决方案。所以我会分享给其他人。

对 ExtendedEntity 的引用导致了问题。 ExtendedEntity 是一个经过审计的类,具有不同的子类。但 Envers 不会自动将子类标记为已审核。子类必须对类或任何自己的字段使用 @Audited 注释,以供 Envers 审核。

因此,对任何扩展实体子类的引用(经过审核)都有效。就我而言,我引用了另一个未经 Envers 审核的子类 - 因此抛出了 NullPointerException。通过简单地将 @Audited 注释添加到 ExtendedEntity 类的空扩展(没有自己的属性...只是一个子类来区分另一种类型的实体)并在数据库中创建相关版本控制表,我可以缩小这个差距并解决我的问题问题。

请记住在任何自己的字段或类本身上使用 @Audited 标记子类 - 否则它们不会被审核,您可能会遇到完全相同的问题。

关于java - NullPointerException 在 org.hibernate.envers.event.AuditEventListener.generateBi DirectionCollectionChangeWorkUnits(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com