5

让我有桌子

USER
-id : long
-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 需要鉴别器列,但我没有鉴别器。

4

2 回答 2

8

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

于 2012-05-03T07:12:03.873 回答
2

如果您有分隔符列,则可以为此使用鉴别器。假设您的分隔符列是

utype 字符(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;  
}  
于 2015-09-04T08:21:13.663 回答