04-hibernate注解-一對一雙向外鍵關聯


一對一雙向外鍵

1,主控方的配置同一對一單向外鍵關聯。

2,@OneToOne(mappedBy="card")  //被控方

@OneToOne(mappedBy="card") //mappedBy所對應的是主控方外鍵屬性的值

雙向關聯,必須設置mappedBy屬性,因為雙向關聯只能交給一方去控制,不可能在雙方都設置外鍵保存關聯關系,否則雙方都無法保存

 

主控方類代碼不用修改:

package oto_bfk;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Entity;/*JPA主鍵*/
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/*學生實體類*/
@Entity
@Table(name="Students",schema="sys")
public class Students {
    
    private IdCard card;//身份證對象
    
    private int sid;
    private String gender;//性別
    private Date birthday;
    private String major;//專業
    
    public Students()
    {
        
    }
    
    public Students(IdCard card, String gender, Date birthday, String major) {
        //super();
        this.card=card;
        this.gender = gender;
        this.birthday = birthday;
        this.major = major;
    }

    @Id
    @GeneratedValue //主鍵自動增長
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    @OneToOne(cascade=CascadeType.ALL)//全級聯的級聯關系
    @JoinColumn(name="pid",unique=true)//被控類對應的主鍵為pid
    public IdCard getCard() {
        return card;
    }

    public void setCard(IdCard card) {
        this.card = card;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }
}

被控方的代碼修改如下:

需要注意的是:@OneToOne(mappedBy="card") //mappedBy所對應的是主控方外鍵屬性的值

package oto_bfk;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

import org.hibernate.annotations.GenericGenerator;

/*身份證類*/
@Entity
public class IdCard {

    @Id
    @GeneratedValue(generator="pid")//指定一個生成器為pid
    @GenericGenerator(name="pid",strategy="assigned")//構建一個生成器,生成策略strategy為手工賦值
    @Column(length=18)
    private String pid;//身份證號碼
    private String sname;//學生姓名
 @OneToOne(mappedBy="card") //mappedBy所對應的是主控方外鍵屬性的值。 private Students stu; public IdCard()
    {
        
    }
    public IdCard(String pid, String sname) {
        //super();
        this.pid = pid;
        this.sname = sname;
    }

    public String getPid() {
        return pid;
    }
    public void setPid(String pid) {
        this.pid = pid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public Students getStu() { return stu; } public void setStu(Students stu) { this.stu = stu; }
}

 

 

一對一雙向外鍵聯合主鍵

1,創建主鍵類

2,主鍵類必須實現serialization接口,重寫hashcode()和equals()方法。

 

主鍵類

@Embeddable

實體類

@EmbeddedId

 

這個可以參考前面的屬性注解。

http://www.cnblogs.com/alsf/p/7823134.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM