我想刷新托管实体,我使用了Session.refresh,但它导致了StackOverflowError,因为我映射了双向关系。
另外,我不希望重新加载一对多关系,也不希望保持相同状态,我希望它们不被初始化,就好像它们的父实体是查询结果一样。
我试过了:
@Override
public void refresh(IdentifiableByIdImpl entity) {
Query query;
Object refreshedEntity;
try {
query = session.createQuery(
"FROM " + entity.getClass().getSimpleName() +
"WHERE id = " + entity.getId()
);
refreshedEntity = query.uniqueResult();
copyProperties(refreshedEntity, entity);
} catch(StackOverflowError e) {
System.err.println("S.O");
}
}
但它一直触发StackOverflowError。
一种简单的方法是返回" refreshedEntity"尽管如此,我发现这种方式不灵活。