更新:張貼後,我發現這是this older question的副本。是否有可能*轉換多態Hibernate/JPA實體的類型?
我有一個奇怪的業務需求:我的應用程序支持用戶入門的「客人」,後來註冊成爲「註冊」用戶。
訪客功能受限:他們不允許訪問一些註冊後可用的功能。但是,他們確實可以訪問功能的一個子集,並可能在註冊之前開始累積持久性數據。這些功能中的很多功能都將在用戶實體類中建模爲方法,並且累積的數據自然會通過GuestUser的@Id關聯。
因此,我考慮作爲一個多態型的實體類型在JPA /休眠建模此:
User ^ | +-------------+ | | GuestUser RegisteredUser
我使用布爾辨別字段映射此;沒問題:
@DiscriminatorColumn(name="guest", discriminatorType=DiscriminatorType.INTEGER)
這工作正常,直到GuestUser決定「註冊」...?!
現在,我想我的guestuser的轉變成一個RegisteredUser,通過設置
guestUser.guest = false;
結果這種轉變將邏輯上清除從生存的guestuser的對象,然後用相同的獲取同等RegisteredUser ID和共享字段從繼承的用戶映射。
這可能嗎?我可以使用entityManager.refresh()以某種方式實現所需的結果嗎?我是否可以創建一個RegisteredUser實例並手動將它的ID分配給現有GuestUser的值? (這個ID分配的想法似乎有問題,因爲我們的遺留數據庫需要GenerationType.AUTO
。)
[如何更改JPA中的實體類型?](http://stackoverflow.com/questions/744520/how-to-change-entity-type-in-jpa) – 2010-08-06 06:48:35