hibernate加入策略继承和多态
hibernate joined strategy inheritance and polymorphism
在hibernate中,当我使用joined策略的时候。 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
}
}
和派生的 class:
@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 和设置器。
所以总的来说,我什么时候会这样做:
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 是否会自动执行 return 当你查询所有人员时的雇员。此外,如果它在对象声明为 Person 时插入一个 Employee p = new Employee().
对两者的简短回答是。更详细。
插入操作基于对象的实际类型,而不是完全基于源代码中编写的类型。
与Persons的查询相关。 Hibernate 确实对所有子类型进行了左外连接,因此当您执行以下操作时,您也会得到 Employess:
Query query = session.createQuery("From Person ");
List<Person> persons = query.getResultList();
在hibernate中,当我使用joined策略的时候。 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
}
}
和派生的 class:
@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 和设置器。
所以总的来说,我什么时候会这样做:
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 是否会自动执行 return 当你查询所有人员时的雇员。此外,如果它在对象声明为 Person 时插入一个 Employee p = new Employee().
对两者的简短回答是。更详细。 插入操作基于对象的实际类型,而不是完全基于源代码中编写的类型。 与Persons的查询相关。 Hibernate 确实对所有子类型进行了左外连接,因此当您执行以下操作时,您也会得到 Employess:
Query query = session.createQuery("From Person ");
List<Person> persons = query.getResultList();