2011-03-15 120 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> 
相关问题