java – 关于超类属性的Hibernate查询

首先,请原谅我在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 – 关于超类属性的Hibernate查询 - 代码日志