导致EntityType.java:677的Hibernate无限循环的原因是什么?

时间:2015-03-27 15:02:01

标签: hibernate infinite-loop

运行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;
    }
}

之前是否有人遇到此问题或知道是什么原因造成的?

1 个答案:

答案 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" />

解决了问题。