2011-08-23 54 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。 –