NullPointerException异常在org.hibernate.envers.event.AuditEventListener.generateBidirectionalCollectionChangeWorkUnits(...)

StackOverflow https://stackoverflow.com/questions/1764048

我使用Envers审核我的实体的不同领域。该框架做工一般,但它似乎有一些类型的实体映射的问题。所有以前的问题我能解决自己...但是这一次,我卡住了。

当插入一些实体到数据库中得到以下例外:

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

我不完全地确定,因为它被冲洗时烧制()和复杂的应用程序插入一个较大的事务内的许多不同的实体,其实体导致此。

我们使用的是一些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一切工作正常。但是,我们需要envers产生变化的历史。

有帮助吗?

解决方案

我发现我的问题的解决方案。所以,我会为他人分享。

到ExtendedEntity参考引起的问题。 ExtendedEntity是不同的子类的审计类。但是,随着审计Envers不会自动标记子类。子类必须使用@Audited注解为类或任何自己的字段由Envers进行审计。

因此,为了ExtendedEntity的任何sublass,这是审计的引用,工作。就我而言,我引用的不是由Envers审计另一个子 - 这样一来NullPointerException异常被抛出。通过简单地将@Audited注释到ExtendedEntity类(没有自己的属性...只是区分其他类型实体的子类),并在数据库中的相关版本表的创建的那个空的扩展,我可以缩小这一差距,解决我的问题

记住在任何自己的领域或类本身来标记与@Audited子类 - 否则他们未经会计师事务所审计,你可能会遇到相同问题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top