gpt4 book ai didi

java - hibernate加入了策略继承和多态

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:26 25 4
gpt4 key购买 nike

在 hibernate 状态下,当我使用连接策略时。 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 会生成对 person 和 employee 的查询吗?换句话说,hibernate会支持多态行为吗?

最佳答案

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

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

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

关于java - hibernate加入了策略继承和多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30159789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com