Hibernate 4 NonUniqueObjectException嵌入式ID

时间:2014-04-19 11:14:14

标签: hibernate

如果从hibernate 3.6迁移到4.3,那么在刷新包含了嵌入式Id中的ManyToOne的实体期间会出现NonUniqueObjectException,那么您应该看一下响应

1 个答案:

答案 0 :(得分:0)

在EntityLoadQueryDetails类的readRow期间 我们有

if ( entityPersister.getIdentifierType().isComponentType()  ) {
     final ComponentType identifierType = (ComponentType) entityPersister.getIdentifierType();
     if ( !identifierType.isEmbedded() ) {
         addKeyManyToOnesToSession(
            context,
            identifierType,
            entityKey.getIdentifier()
                        );
                    }
}

如果您检查ComponentType的代码 - > isEmbedded()你会发现

@Override
public boolean isEmbedded() {
     return false; -->> that dosent make a sens !!
}

所以我改变它,即使它不是

的完美解决方案
@Override
public boolean isEmbedded() {
    return propertyNames.length>1;
}

这对我来说非常有用