2011-08-23 82 views
4

首先,請原諒我對Java和Hibernate的無知,我正在研究不同的ORM解決方案,而不是Java程序員。關於超類屬性的Hibernate查詢

1)是否可以將以下類層次結構映射到數據庫表,其中Person.nameEmployee.name指向不同的列?

abstract public class Person { 
     private String name; 
} 

public class Employee extends Person { 
     private String name; 
} 

2)假設的答案1)是肯定的,有沒有方法來創建一個HQL或條件查詢這將讓Hibernate返回Employee對象,對Person.name的標準?

類似的東西:

SELECT e FROM Employee e WHERE e.super.name = "test"; 

回答

1

1)是的。這可以通過一個MappedSuperclass來完成,並標註你的列

@MappedSuperclass 
abstract public class Person { 
    @Column(name="PERSON_NAME") 
    private String name; 
} 
@Entity 
public class Employee extends Person { 
     @Column(name="EMPLOYEE_NAME") 
     private String name; 
} 

2)不,不是,而不改變任何人或員工之一的屬性名稱。但是,您可以查詢具有該名稱的所有人員對象,並將結果轉換爲員工。另一個選擇是使用Native SQL來查詢你想要的列,可能也不是很理想。

SELECT p FROM Person p WHERE p.name = "test"; 
+0

謝謝。這意味着p.name根據「FROM」類映射到DQL查詢中的兩個不同列? – Benjamin

+0

是的,p.name將其限定爲「Person」,因此JPA知道將其映射到PERSON_NAME。 –