如果从hibernate 3.6迁移到4.3,那么在刷新包含了嵌入式Id中的ManyToOne的实体期间会出现NonUniqueObjectException,那么您应该看一下响应
答案 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;
}
这对我来说非常有用