首先,请原谅我对 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
?
类似的东西:
SELECT e FROM Employee e WHERE e.super.name = "test";
最佳答案
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";
关于java - 对父类(super class)属性的 Hibernate 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7165509/