【问题标题】:Hibernate query on superclass property超类属性的休眠查询
【发布时间】:2011-11-02 04:35:04
【问题描述】:

首先,请原谅我对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";

【问题讨论】:

    标签: java hibernate oop orm hibernate-mapping


    【解决方案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 之一的属性名称,否则不会。但是,您可以查询具有该名称的所有人员对象并将结果转换为员工。另一种选择是使用 Native SQL 来查询您想要的列,同样可能并不理想。

    SELECT p FROM Person p WHERE p.name = "test";
    

    【讨论】:

    • 谢谢。这意味着 p.name 映射到 DQL 查询中的两个不同列,具体取决于“FROM”类?
    • 是的 p.name 将其限定为“Person”,因此 JPA 知道将其映射到 PERSON_NAME。
    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 2016-04-22
    • 2014-09-15
    • 1970-01-01
    • 2012-09-20
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多