首先,请原谅我在Java和Hibernate中的无知,我正在研究不同的ORM解决方案,而不是Java程序员。
1)是否可以将以下类层次结构映射到数据库表,Person.name
和Employee.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";
答案 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";