在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会为人员和员工生成查询吗? 换句话说,hibernate会支持多态行为吗?
答案 0 :(得分:0)
当我理解你正确的问题而不是你想知道hibernate在那种情况下是否会在你查询所有人时自动返回Employees。此外,如果在将对象声明为Person p = new Employee()。
时插入Employee答复是的。更详细。 插入操作基于对象的实际类型,而不是源代码中写入的类型。 与查询人员有关。 Hibernate确实将外连接保留为所有子类型,因此当您执行以下操作时,您还将获得Employess:
Query query = session.createQuery("From Person ");
List<Person> persons = query.getResultList();