Java 超类属性的Hibernate查询
首先,请原谅我对Java和Hibernate的无知,我正在研究不同的ORM解决方案,不是Java程序员 1) 是否可以将以下类层次结构映射到一个数据库表,Java 超类属性的Hibernate查询,java,hibernate,oop,orm,hibernate-mapping,Java,Hibernate,Oop,Orm,Hibernate Mapping,首先,请原谅我对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)
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对象,并将结果强制转换为Employees。另一种选择是使用本机SQL查询所需的列,这可能也不理想
SELECT p FROM Person p WHERE p.name = "test";
非常感谢。这意味着p.name映射到DQL查询中的两个不同列,具体取决于“FROM”类?是的,p.name将其限定为“Person”,因此JPA知道将其映射到Person\u name。