重要的属性,对于其他就是简单的继承,但是表里可以扩充,所以不能用nullable控制
@DiscriminatorColumn(name="person_type",discriminatorType=DiscriminatorType.STRING) //辨别的类型,这里是String
@DiscriminatorValue("person") //类型为person
-----------------------------------------------------------------------------------------
package Person_Test;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@DiscriminatorColumn(name="person_type",discriminatorType=DiscriminatorType.STRING) //辨别的类型,这里是String
@DiscriminatorValue("person") //类型为person
@Table(name="person_inf")
public class Person {
@Id
@Column(name="person_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private String gender;
@Embedded
@AttributeOverrides({ //组件
@AttributeOverride(name="detail",column=@Column(name="address_detail")),
@AttributeOverride(name="zip",column=@Column(name="address_zip")), // 将Address作为组件,这里是覆写Column
@AttributeOverride(name="country",column=@Column(name="address_country"))
})
private Address address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
-----------------------------------------------------------------------------------------------------------------------------------
package Person_Test;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
@DiscriminatorValue("employee")
public class Employee extends Person {
private String title;
private double salary;
@OneToMany(targetEntity=Customer.class,cascade=CascadeType.ALL,mappedBy="employee")
private Set<Customer> customers=new HashSet<Customer>();
@ManyToOne(targetEntity=Manager.class,cascade=CascadeType.ALL)
@JoinColumn(name="manager_id")
private Manager manager;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Set<Customer> getCustomers() {
return customers;
}
public void setCustomers(Set<Customer> customers) {
this.customers = customers;
}
public Manager getManager() {
return manager;
}
public void setManager(Manager manager) {
this.manager = manager;
}
package Person_Test;
import java.util.Set;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
@DiscriminatorValue("customer")
public class Customer extends Person{
private String comments;
@ManyToOne(targetEntity=Employee.class)
@JoinColumn(name="employee_id",referencedColumnName="person_id")
private Employee employee;
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
package Person_Test;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
@Entity
@DiscriminatorValue("manager")
public class Manager extends Employee{
private String department;
@OneToMany(targetEntity=Employee.class,cascade=CascadeType.ALL,mappedBy="manager")
private Set<Employee> employee=new HashSet<Employee>();
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public Set<Employee> getEmployee() {
return employee;
}
public void setEmployee(Set<Employee> employee) {
this.employee = employee;
}
}
package Person_Test;
public class Address {
private String detail;
private String zip;
private String country;
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
package Person_Test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import Factory_GetSession.GetConnnection_Session;
public class Person_Manager {
public static void main(String[] args) {
Session sess=GetConnnection_Session.GetSession();
Transaction ta=sess.beginTransaction();
Address address=new Address();
address.setCountry("Country");
address.setDetail("Detail");
address.setZip("Zip");
Person person=new Person();
person.setAddress(address);
person.setGender("Gender");
person.setName("Name");
sess.save(person);
Manager manager=new Manager();
manager.setAddress(address);
manager.setDepartment("department");
manager.setName("name");
manager.setGender("gender");
manager.setTitle("title");
manager.setDepartment("department");
manager.setSalary(12);
sess.save(manager);
Employee emplyee=new Employee();
emplyee.setAddress(address);
emplyee.setGender("gender");
emplyee.setManager(manager);
emplyee.setName("name");
emplyee.setSalary(12);
emplyee.setTitle("title");
sess.save(emplyee);
Customer customer=new Customer();
customer.setAddress(address);
customer.setComments("comments");
customer.setEmployee(emplyee);
customer.setGender("gender");
customer.setName("name");
sess.save(customer);
ta.commit();
sess.close();
}
}