2012-05-03 26 views
5

Let sahip olduğum tabloHaritalama iki sınıfları

KULLANICI
-id: Uzun
-login: varchar
-weapon: varchar
-Sihirli: varchar

Ve bu tabloyu iki sınıfta (Hibernate/JPA kullanarak) haritalamak istiyorum (

Ben HQL sorgu gönderirseniz

ve

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

Ve: SELECT m FROM Mag m WHERE m.login = ? sonra Mag instance'a
olsun ve ben HQL sorgu gönderirseniz: SELECT w FROM Warrior w WHERE w.login = ? sonra Savaşçı örneği
bu

gibi bir şey yapmak denemek olsun
@Entity 
@Table(name = "User") 
class User 
{ 
    long id; 
    String login; 
} 

@Entity 
class Mag extends User 
{ 
    String magic; 
} 

@Entity 
class Warrior extends User 
{ 
    String weapon; 
} 

Ancak, Kalıtım için gerekli ayrımcı sütunu var, ancak ayrımcı olmadım.

cevap

8

MappedSuperClass için alt sınıfların bir ayırıcıya gerek kalmadan süper sınıftan ek açıklamaları miras almasına izin veriyorsunuz.

2

Ayırıcı sütununuz varsa bunun için Ayırıcıyı kullanabilirsiniz. Kim deliminator sütun varsayalım

uType char (1)

ve

uType = m ise, bu, bir MAG işletme ve

uType w =, yani bir Savaşçı tüzel kişiliği

Lütfen kod belirtiniz.

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