【问题标题】:hibernate joined strategy inheritance and polymorphismhibernate加入了策略继承和多态性
【发布时间】:2015-05-11 04:42:10
【问题描述】:

在休眠中,当我使用连接策略时。 hibernate支持多态吗?

    for example:

        @Entity
        @Table(name = "PERSON")
        @Inheritance(strategy=InheritanceType.JOINED)
        public class Person {

            @Id
            @GeneratedValue
            @Column(name = "PERSON_ID")
            private Long personId;

            @Column(name = "FIRSTNAME")
            private String Fullname;

            public Person() {

            }
            public Person(String fullname) {
                this.Fullname= fullname
            }
        }

和派生类:

    @Entity
    @Table(name="EMPLOYEE")
    @PrimaryKeyJoinColumn(name="PERSON_ID")
    public class Employee extends Person {

        @Column(name="department_name")
        private String departmentName;

        public Employee() {
        }

        public Employee(String fullname, String departmentName,) {
            super(fullname);       
            this.departmentName = departmentName;
        }
    }

所有字段还包括 getter 和 setter。
所以在我的主要情况下,我什么时候会这样做:

session.beginTransaction();
person e = new Employee();
e.setFullname("james");
e.setdepartmentName("R&D");
session.getTransaction().commit();

我知道如果 e 是 Employee 类型,hibernate 会为 Employee 和 Person 表创建一行。 但是对于这个例子,hibernate 会为人员和员工生成查询吗? 换句话说,hibernate会支持多态行为吗?

【问题讨论】:

    标签: java hibernate polymorphism


    【解决方案1】:

    当我正确理解您的问题时,您想知道当您查询所有人员时,hibernate 在这种情况下是否会自动返回员工。此外,如果它在对象声明为 Person p = new Employee() 时插入一个 Employee。

    对两者的简短回答是。更详细。 插入操作基于对象的实际类型,而不是完全基于源代码中编写的类型。 与查询人员有关。 Hibernate 会左外连接所有子类型,因此当您执行以下操作时,您也会得到 Employess:

    Query query = session.createQuery("From Person ");
    List<Person> persons = query.getResultList();
    

    【讨论】:

    • 所以如果我理解正确的话,hibernate 会将行插入到个人和员工表中,因为它支持这种多态行为
    • 这就是我想说的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多