关于超类属性的Hibernate查询

时间:2011-08-23 18:03:58

标签: java hibernate oop orm hibernate-mapping

首先,请原谅我在Java和Hibernate中的无知,我正在研究不同的ORM解决方案,而不是Java程序员。

1)是否可以将以下类层次结构映射到数据库表,Person.nameEmployee.name指向不同的列?

abstract public class Person {
        private String name;
}

public class Employee extends Person {
        private String name;
}

2)假设1)的答案为是,是否有办法创建一个HQL或Criteria查询,要求Hibernate返回Employee个对象,并在Person.name上标准?< / p>

类似的东西:

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

1 个答案:

答案 0 :(得分: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)否。不会更改Person或Employee之一的属性名称。但是,您可以使用该名称查询所有人员对象,并将结果强制转换为Employees。另一种选择是使用Native SQL来查询所需的列,这可能也不太理想。

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