0

我使用无状态事务服务(意思是,我为每个调用打开一个新会话和事务),如下所示:

@Transactional
void someService(Object o) {
    Object newO = entityManager.merge(o);
    newO.getChildren().add(something);
}

我传递给服务的 Object o 是一个detached object。问题merge(object)是,它返回一个新的实例来操作,而不是使参数本身持久化。因此,我对持久对象所做的任何更改都不会发生在内存中的原始对象上。

我当然可以重新连接我所有的本地参考,但我希望有更好的解决方案。

有没有办法让我的本地实例管理,而不是获取一个新实例?

我试过了refresh(object)update(object)但我确实遇到了异常,因为对象的关联仍然是分离的。

当我用它注释关联时,@Cascade(value=CascadeType.save-update)它工作正常,但是当我有很多 OneToMany 或 ManyToMany 关联时,这不会导致性能问题吗?

4

2 回答 2

1

我认为您可以只使用分离的Object o,然后只使用session.update(o).

试试看这个视频教程,也许会有用!

再见!

于 2013-10-15T09:15:16.900 回答
0

您可以使用find(entityClass, primaryKey)方法来加载您的对象。只需指定主键和实体类值,它就会从数据库返回一个活动对象。

现在对这个对象进行更改,对这个活动对象所做的任何更改都将被反映回来,hibernate 将相应地更新数据库。我个人遇到过这样的情况,这对我有用。

于 2013-10-15T08:49:40.627 回答