2012-05-03 69 views
5

讓我們的我有表映射兩個班的單表

用戶
-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 = ?然後我得到馬格實例
,如果我送HQL查詢:SELECT w FROM Warrior w WHERE w.login = ?然後我得到勇士例如
我儘量讓這樣的事情

@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

如果您有分隔符列,您可以使用Discriminator進行此操作。假設你deliminator列是

UTYPE炭(1)

如果

UTYPE = m,即是一種彈匣實體和

UTYPE = W,即戰士實體

請在下面找到代碼。

@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; 
}