Dan*_*ner 0 java hibernate hibernate-envers
我正在使用Envers审核我的实体的不同字段.该框架通常起作用,但似乎在某些类型的实体映射中存在问题.所有以前的问题我都可以自己解决......但这次我被困住了.
将某个实体插入数据库时,我得到以下异常:
Caused by: java.lang.NullPointerException
at org.hibernate.envers.event.AuditEventListener.generateBidirectionalCollectionChangeWorkUnits(AuditEventListener.java:108)
Run Code Online (Sandbox Code Playgroud)
我不完全确定哪个实体导致这种情况,因为它在flush()期间被触发,并且复杂的应用程序在一个较大的事务中插入许多不同的实体.
我们正在使用一些在该异常之前触发的HibernateEventListener ...所以我认为该实体是原因.persistence.xml以这种方式配置:
<property name="hibernate.ejb.event.post-insert" value="com.xyz.hibernate.events.listeners.MyListener,org.hibernate.envers.event.AuditEventListener" />
Run Code Online (Sandbox Code Playgroud)
如果这是真的,则实体如下(摘录):
@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!
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道在哪里寻找?一旦我们禁用Envers,一切正常.但我们需要envers来产生变化的历史.
我找到了问题的解决方案.所以我会为别人分享.
对ExtendedEntity的引用导致了这个问题.ExtendedEntity是具有不同子类的审计类.但是Envers并不会自动将子类标记为已审计.子类必须对类使用@Audited批注,或者由Envers审核任何自己的字段.
因此,对已经审计的ExtendedEntity的任何子类的引用都有效.在我的例子中,我引用了另一个未被Envers审核的子类 - 因此抛出了NullPointerException.通过简单地将@Audited注释添加到ExtendedEntity类的空扩展(没有自己的属性...只是一个子类来区分另一种类型的实体)和在数据库中创建相关的版本控制表,我可以缩小差距并解决我的问题问题.
请记住在任何自己的字段或类本身使用@Audited标记子类 - 否则它们不会被审核,您可能会遇到完全相同的问题.
| 归档时间: |
|
| 查看次数: |
2548 次 |
| 最近记录: |