2011-03-15 160 views
0

我有以下結構,我想在hibernate中映射。Hibernate將接口映射爲具有多個實現的實體

class User implements iUser 
class VIPUser implements iUser 

class preference 
    public var user:iUser; 

我讀過,當您提供目標類時可以映射接口。 但在我的情況下,我不知道目標類,因爲它可以是用戶或VIPUser。

用戶和VIPUser是兩個獨立的實體,它們存儲在不同的表中。

這個映射是否可能在休眠,有沒有人有如何建立它的例子?

在此先感謝

回答

1

從邏輯上講,我想這VIPUser將延長User。在這種情況下,您可以映射「根」實體(User)並告訴Hibernate您要使用哪種繼承策略。在這種情況下,我想這應該是「每個具體類的表」。

+0

我同意,在樣品中我提供更好的解決方案是把它擴大。但是我的應用程序中的問題不允許這些類擴展。我在這裏提供的樣本只是爲了說明結構。所以讓我們說它不可能使用擴展,是否有辦法使它與界面一起工作。 – 2011-03-15 13:58:37

1

這是一個有點遲到了,但@Any/<any>映射支持此

@Any(metaColumn = @Column(name = "USER_TYPE")) 
@AnyMetaDef(idType = "long", metaType = "string", 
    metaValues = { 
     @MetaValue(targetEntity = User.class, value = "user"), 
     @MetaValue(targetEntity = VIPUser.class, value = "vip"), 
    }) 
@JoinColumn(name="USER_ID") 
private IUser user; 

或HBM

<any name="user" meta-type="string" id-type="long"> 
    <meta-value value="user" class="User"/> 
    <meta-value value="vip" class="VIPUser"/> 
    <column name="USER_TYPE"/> 
    <column name="USER_ID"/> 
</any> 
相關問題