重新加载实体,好像它们只是从查询中获得输出

时间:2017-07-21 11:57:50

标签: java hibernate orm lazy-loading

我想刷新托管实体,我使用了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"尽管如此,我发现这种方式不灵活。

0 个答案:

没有答案