hibernate 继承——整个类对应一个表

重要的属性,对于其他就是简单的继承,但是表里可以扩充,所以不能用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();
        
    }

}




       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值