在单个表上映射两个类

时间:2012-05-03 07:08:02

标签: java hibernate jpa

我们有桌子

用户
-id:长
-login:varchar
-weapon:varchar
-magic:varchar

我希望将这个表映射到两个类(使用Hibernate / JPA)

class Mag  
{   
   long id;  
   String login;  
   String weapon;  
}  

class Warrior  
{  
   long id;  
   String login;  
   String magic;  
}  

如果我发送HQL查询:SELECT m FROM Mag m WHERE m.login = ?那么我得到Mag实例
如果我发送HQL查询:SELECT w FROM Warrior w WHERE w.login = ?那么我得到Warrior实例
我尝试做这样的事情

@Entity  
@Table(name = "User")  
class User   
{  
   long id;  
   String login;  
}  

@Entity  
class Mag extends User  
{  
   String magic;  
}  

@Entity  
class Warrior extends User   
{  
   String weapon;  
}   

但@Inheritance要求鉴别器列,但我没有鉴别器。

2 个答案:

答案 0 :(得分:8)

您正在寻找MappedSuperClass,它允许子类从超类继承注释,而无需使用鉴别器。

答案 1 :(得分:2)

如果你有一个deliminator列,你可以使用Discriminator。假设你的deliminator列是

  

utype char(1)

如果

  

utype = m,这是一个Mag实体和

     

utype = w,即Warrior实体

请在下面找到代码。

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "utype", discriminatorType =  DiscriminatorType.CHAR)
@Table(name = "User")  
class User   
{  
   long id;  
   String login;  
}  

@Entity
@DiscriminatorValue("m")  
class Mag extends User  
{  
   String magic;  
}  

@Entity  
@DiscriminatorValue("w")  
class Warrior extends User   
{  
   String weapon;  
}