java - 对父类(super class)属性的 Hibernate 查询

标签 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?

类似的东西:

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/

相关文章:

Java Executors 和每线程(不是每工作单元)对象?

java - hibernate ConstraintViolationException : could not delete the SortedSet Collection of Child

java - C++ 全局变量与 Java 实例变量

java - Hibernate异常(一对多关系): reference to unknown entity

java - Spring MVC 中的错误 : java. lang.NoSuchMethodException : java. lang.Long.<init>()

德尔福企业版 : how can I apply the Visitor Pattern without circular references?

javascript - new 与 Object.create() 之间的真正区别是什么

java - Struts2 Action - 测试与否?

Java动态加载类的问题

java - 为什么 finish() 不立即退出处理?