Hibernate 如何使用MyBatis+;冬眠

Hibernate 如何使用MyBatis+;冬眠,hibernate,persistence,mybatis,Hibernate,Persistence,Mybatis,我正在使用2框架来获取和保存我的数据(MyBatis用于获取,Hibernate用于保存/更新/删除)。我想要的是用mybatis获取一些实体,并将其分配给一个新实体,然后用hibernate保存它 例如: 我通过mybatis查询得到一个“角色”列表。 然后我尝试创建一个具有该映射的新实体: @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "id_role") private Role ro

我正在使用2框架来获取和保存我的数据(MyBatis用于获取,Hibernate用于保存/更新/删除)。我想要的是用mybatis获取一些实体,并将其分配给一个新实体,然后用hibernate保存它

例如:

我通过mybatis查询得到一个“角色”列表。 然后我尝试创建一个具有该映射的新实体:

@ManyToOne(fetch = FetchType.LAZY, optional = false)
  @JoinColumn(name = "id_role")
  private Role role;
我只是在用列表中的一个角色做一个setRole。然后我从hibernate调用saveOrUpdate。我得到一个例外:

对象引用未保存的临时实例-在刷新之前保存临时实例

我理解例外情况,但有解决方案吗


非常感谢您的帮助。

按照您加载角色的方式(通过MyBatis),Hibernate不知道这些角色已经在数据库中。因此,你会看到一个例外。解决此问题的唯一方法是在实体中而不是在角色对象中存储roleId。或者,您必须通过Hibernate加载角色以及使用它们的实体。

这是一个非常不寻常的架构决策:为相同的对象使用两个持久性框架。你能详细说明一下你是如何得出这个解决方案的吗?另外,你有没有让MyBatis和Hibernate反对相同的事务、相同的连接、相同的数据库?我知道这是一个不寻常的架构决策,但MyBatis有一些Hibernate在获取数据和Hibernate的持久性数据方面没有的优势。两个框架使用的不是同一个事务,也不是同一个连接,而是同一个数据库。有没有办法告诉hibernate持久化实体,只更新角色和另一个角色之间的映射,而不尝试持久化角色对象。@user2591626:我不知道。