运行Hibernate 4.3.5,我在这里得到一个无限循环,导致StackOverflowError:
org.hibernate.type.EntityType.getIdentifierOrUniqueKeyType(EntityType.java:677)
有问题的方法是:
public final Type getIdentifierOrUniqueKeyType(Mapping factory) throws MappingException {
if ( isReferenceToPrimaryKey() || uniqueKeyPropertyName == null ) {
return getIdentifierType(factory);
}
else {
Type type = factory.getReferencedPropertyType( getAssociatedEntityName(), uniqueKeyPropertyName );
if ( type.isEntityType() ) {
type = ( ( EntityType ) type).getIdentifierOrUniqueKeyType( factory );
}
return type;
}
}
之前是否有人遇到此问题或知道是什么原因造成的?
答案 0 :(得分:1)
想出来,我在两端创建了两个一对一的关系:
<one-to-one name="payment" property-ref="invoice" lazy="proxy" />
<one-to-one name="invoice" property-ref="payment" lazy="proxy" />
将Hibernate发送到无限循环中。我将在Hibernate上查看是否存在关于此问题的错误报告,因为似乎不可能为此添加检查以及更好的错误消息。
用以下方式取代关系的一端:
<many-to-one name="payment" column="payment_id" unique="true" lazy="proxy" />
解决了问题。