2013-07-17 23 views
1

我使用2框架來獲取和保存我的數據(MyBatis for fetch和Hibernate進行保存/更新/刪除)。我想要的是得到一些實體的MyBatis並將其分配給一個新的實體,並與Hibernate保存如何使用MyBatis +休眠保存實體

例子:

我通過查詢的MyBatis獲得「角色」列表。 後來我想創建誰有映射一個新的實體:

@ManyToOne(fetch = FetchType.LAZY, optional = false) 
    @JoinColumn(name = "id_role") 
    private Role role; 

我只是做一個角色setRole從列表中的一個角色。然後我從休眠狀態調用saveOrUpdate。我得到這個異常:

對象引用一個未保存的瞬態的實例 - 沖洗

我明白了異常,但有一個解決方案之前保存的瞬態的實例?

非常感謝你的幫助。

+0

這是一個非常不尋常的架構決定:對同一對象使用2個持久性框架。你能詳細說明你是如何到達這個解決方案的?另外,您是否有MyBatis和Hibernate違背相同的事務,相同的連接,相同的數據庫? – Olaf

+0

我知道這是一個不尋常的架構決定,但是mybatis有一些優勢,即hibernate不會爲持久化的東西獲取東西和相同的東西。兩個框架都沒有使用相同的事務,而是使用相同的數據庫而不是相同的連接。 – user2591626

回答

0

您如何加載角色(通過MyBatis),Hibernate並不知道角色已經存在於數據庫中。因此你看到的例外。解決它的唯一方法是將roleId存儲在實體中,而不是Role對象。或者,您必須通過Hibernate加載角色以及使用它們的實體。

+0

有什麼辦法可以告訴hibernate堅持實體,只是更新角色與其他角色之間的映射,而不嘗試持續角色對象。 – user2591626

+0

@ user2591626:不是我所知道的。 – Olaf