?? 每個具體類一個表的方式是只有具體類對應一張表,包括父類和子類,父類和子類的關系是通過
在子類中保存父類的id來實現的。所以保存一條子類的信息需要同時向父類和子類的表中插入記錄。
一個例子如下:
·? 類Person.java
package com.jason.inheritance.three;
public abstract class Person {
?private Long id;
?private String name;
?/**
? * @hibernate.id
? *?? column="ID"
? *?? generator-class="hilo"
? *?? unsaved-value="null"
? */
?public Long getId() {
??return id;
?}
?public void setId(Long id) {
??this.id = id;
?}
?/**
? * @hibernate.property
? *?? length = "24"
? */
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
}
?
·? 子類Professor.java
package com.jason.inheritance.three;
public class Professor extends Person {
?private int salary;
?/**
? * @hibernate.property
? */
?public int getSalary() {
??return salary;
?}
?public void setSalary(int salary) {
??this.salary = salary;
?}
}
·? 子類Student.java
package com.jason.inheritance.three;
public class Student extends Person {
?private String studentNumber;
?/**
? * @hibernate.property
? *?? length = "24"
? */
?public String getStudentNumber() {
??return studentNumber;
?}
?public void setStudentNumber(String studentNumber) {
??this.studentNumber = studentNumber;
?}
}
?
·? Professor.hbm.xml
??????顯然對應的表是
??????professor(id, name, salary)
????? student(id, name, studentNumber)
????? 插入記錄的sql如下:
??????Hibernate: insert into Student (studentNumber, name, ID) values (?, ?, ?)
●?優點:
· 報表操作實現簡單:表中包含了具體子類的所有信息。
● 缺點:
· 類的修改會導致相對應的表及其子類所對應表的更改。
·?當含有多重子類時,會造成在數據庫表格中生成重復的字段。
參考:
· HIBERNATE - 符合Java習慣的關系數據庫持久化(第8章)