hibernate註解實現一對一雙向外來鍵關聯
阿新 • • 發佈:2019-02-11
一對一雙向外來鍵關聯
1、主控方的配置同一對一單向一樣不用更改
2、在被控方設定關聯物件的屬性引用上加上@OneToOne主鍵
3、雙向關聯,必須要有mappedBy屬性(mappedBy的意思是由對方主導關聯關係)
注意:自動生成表時會在兩張表上都加入外來鍵關聯關係,可以通過沒置mappedBy來解決
1、建立實體類Person並新增idCard引用
package cn.yinghuo.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; import org.hibernate.annotations.GenericGenerator; /** * 雙向外來鍵關聯 * 主控方 */ @Entity public class Person { public String pid; public String pname; public IdCard idCard; @Id //主鍵 @GeneratedValue(generator="uuid") //指定一個生成器為uuid @GenericGenerator(name = "uuid", strategy ="uuid") //構建一個生成器,生成策略strategy為手工賦值 public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } @OneToOne //全級聯的級聯關係 @JoinColumn(name="cid") //被控類對應的主鍵為cid public IdCard getIdCard() { return idCard; } public void setIdCard(IdCard idCard) { this.idCard = idCard; } }
2、建立實體類idCard並新增Person引用
package cn.yinghuo.model;
/**
* 雙向外來鍵關聯
* 被控方
*/
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 {
public String cid;
public String cname;
public Person person;
@Id // 主鍵
@GeneratedValue(generator="uuid") //指定一個生成器為uuid
@GenericGenerator(name = "uuid", strategy ="uuid") //構建一個生成器,生成策略strategy為手工賦值
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@OneToOne(mappedBy="idCard")
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
3、建立測試類
package cn.yinghuo.action;
/**
* 測試類
*/
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class Main {
public static void main(String[] args) {
schemaExport();
}
// schemaExport()生成資料庫表
// 第一個true是在控制檯打印出DDL,如果是false沒什麼影響只是不再打印出DDL(資料庫定義語言)
// 第二個true是建立表,反之false則不建立
public static void schemaExport() {
new SchemaExport(new Configuration().configure()).create(true, true);
}
}
4、在XML中引入對映檔案
<mapping class="cn.yinghuo.model.Person" />
<mapping class="cn.yinghuo.model.IdCard" />