我正在使用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来生成变化历史。