Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.hibernate.envers.event.AuditEventListener.generateBidirectionalCollectionChangeWorkUnits(…)上的NullPointerException_Java_Hibernate_Hibernate Envers - Fatal编程技术网

Java org.hibernate.envers.event.AuditEventListener.generateBidirectionalCollectionChangeWorkUnits(…)上的NullPointerException

Java org.hibernate.envers.event.AuditEventListener.generateBidirectionalCollectionChangeWorkUnits(…)上的NullPointerException,java,hibernate,hibernate-envers,Java,Hibernate,Hibernate Envers,我正在使用Envers审核实体的不同字段。该框架通常可以工作,但似乎在某些类型的实体映射方面存在问题。以前我能自己解决的所有问题。。。但这次我被卡住了 在将某些实体插入数据库时,我遇到以下异常: Caused by: java.lang.NullPointerException at org.hibernate.envers.event.AuditEventListener.generateBidirectionalCollectionChangeWorkUnits(AuditEvent

我正在使用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的任何子类的引用都有效。在我的例子中,我引用了另一个未经Envers审核的子类,因此引发了NullPointerException。只需将@Audited注释添加到ExtendedEntity类的空扩展中,就不会有自己的属性。。。只要一个子类来区分另一种类型的实体,并在数据库中创建相关的版本表,我就可以缩小这个差距并解决我的问题


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

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

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

因此,对已审计的ExtendedEntity的任何子类的引用都有效。在我的例子中,我引用了另一个未经Envers审核的子类,因此引发了NullPointerException。只需将@Audited注释添加到ExtendedEntity类的空扩展中,就不会有自己的属性。。。只要一个子类来区分另一种类型的实体,并在数据库中创建相关的版本表,我就可以缩小这个差距并解决我的问题


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

现在我发现了第一个提示。。。如果我从实体字段中删除@Audited,它就会工作。ExtendedEntity是一个抽象类,对子类使用联接表策略:@Entity@Tablename=ExtendedEntity.TABLE\U NAME@InheritateSectorategy=InheritanceType.JOINED公共抽象类ExtendedEntity ExtendedAbstractEntityDam。。。不能复制这个。只是重新添加了注释,现在它不再失败。也许成功的提交修复了一些envers表?我现在必须搜索另一个有这个问题的实体来缩小范围。我现在知道它发生在哪里了。。。但我还没有找到解决办法。属性类引用扩展实体,扩展实体本身是抽象的。它有许多使用不同继承策略的子类。其中FinalReport是一个抽象AccountingReport的子类,它本身扩展了ExtendedEntity。AccountingReport有一些字段是@Audited的,但FinalReport没有添加更多字段。为FinalReport创建的第一个属性会导致异常-除非我从实体引用中删除@Audited。从那时起,我可以重新处理它,所有的工作。现在我发现了第一个提示。。。如果我从实体字段中删除@Audited,它就会工作。ExtendedEntity是一个抽象类,对子类使用联接表策略:@Entity@Tablename=ExtendedEntity.TABLE\U NAME@InheritateSectorategy=InheritanceType.JOINED公共抽象类ExtendedEntity ExtendedAbstractEntityDam。。。不能复制这个。只是重新添加了注释,现在它不再失败。也许成功的提交修复了一些envers表?我现在必须搜索另一个有这个问题的实体来缩小范围。我现在知道它发生在哪里了。。。但我还没有找到解决办法。属性类引用扩展实体,扩展实体本身是抽象的。它有许多使用不同继承策略的子类。其中一个是FinalReport,它是一个抽象AccountingReport的子类,它本身扩展了Exte 身份。AccountingReport有一些字段是@Audited的,但FinalReport没有添加更多字段。为FinalReport创建的第一个属性会导致异常-除非我从实体引用中删除@Audited。从那以后,我可以重新处理它,一切都会好起来。