2012-05-03 27 views
5

Hãy Tôi có bảngMapping hai lớp trên Bảng Độc

USER
-ID: dài
-login: varchar
-weapon: varchar
-magic: varchar

Và tôi muốn ánh xạ Bảng này trên hai lớp (sử dụng Hibernate/JPA)

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

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

Và nếu tôi gửi HQL truy vấn: SELECT m FROM Mag m WHERE m.login = ? sau đó tôi nhận được Mag dụ
và nếu tôi gửi HQL truy vấn: SELECT w FROM Warrior w WHERE w.login = ? sau đó tôi nhận được chiến binh dụ
tôi cố gắng làm một cái gì đó giống như

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

@Entity 
class Mag extends User 
{ 
    String magic; 
} 

@Entity 
class Warrior extends User 
{ 
    String weapon; 
} 

Nhưng @Inheritance yêu cầu cột phân biệt đối xử, nhưng tôi chưa phân biệt đối xử.

Trả lời

8

Bạn đang tìm kiếm MappedSuperClass, cho phép các lớp con kế thừa các chú thích từ siêu lớp mà không cần phân biệt đối xử.

2

Bạn có thể sử dụng Discriminator cho điều này, nếu bạn có một cột deliminator. Giả sử bạn deliminator cột là

utype char (1)

Và nếu

utype = m, đó là một thực thể Mag và

utype = w, đó là Thực thể chiến binh

Vui lòng tìm mã bên dưới.

@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; 
} 
Các vấn đề liên quan