![](/img/trans.png)
[英]JPA and Hibernate One To One Shared Primary Key Uni-directional Mapping in Spring Boot
[英]One To One shared primary key mapping issue in Spring JPA
我是 Spring JPA 的新手,正在努力保存 object
'表'
書頭
uid int (PK), booknum varchar
圖書信息
bookid(FK)(PK),備注 varchar
BookHeader.java...
@Entity
@Table(name="tbookheader", schema="v2")
public class BookHeader implements Serializable{
@Id
@SequenceGenerator(name="seq-gen",sequenceName="v2.tbookheader_uid_seq", allocationSize = 1)
@GeneratedValue(strategy= GenerationType.IDENTITY, generator="seq-gen")
@Column(name = "uid")
private int uid;
@Column(name = "booknum")
private String bookNum;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "bookHeader")
private BookInfo bookInfo;
}
BookInfo.java
@Entity
@Table(name="tbookinfo", schema="v2")
public class BookInfo implements Serializable{
@Id
@Column(name = "bookid")
private int uid;
@OneToOne
@JoinColumn(name="bookid",referencedColumnName="uid")
private BookHeader bookHeader;
private String remark;
}
我從 json 得到 object 並使用 ZB0AA3DCF498BF4C701ADB4396BB1B4 將 josn 轉換為 object
現在我正在嘗試通過 SPRING JPA 保存它
{
BookHeader.setBookNum("tesetbooking3");
BookHeader.setUserDate(new Date());
BookHeader.setUserid(1111);
BookHeader.setCrtDate(new Date());
BookHeader.setCrtUserId(1111);
return bookHeaderRepository.save(BookHeader);
}
但我得到了例外:
ERROR: insert or update on table "tbookinfo" violates foreign key constraint
"fk_tbookinfo_bookid"
Detail: Key (bookid)=(0) is not present in table "tbookheader".
似乎生成的主鍵不是從父表傳遞的。
有人可以幫助我。
TIA。
將id
屬性從int
更改為Integer
。
int
屬性的默認值為0
,這是一個有效的外鍵,但在 DB 中沒有具有該鍵的 object。
首先,您創建了一個@OneToOne
,但您沒有做任何事情來表明這是一個共享主鍵 model。
書頭:
@Entity
@Table(name="tbookheader", schema="v2")
public class BookHeader implements Serializable{
@Id
@SequenceGenerator(name="seq-gen",sequenceName="v2.tbookheader_uid_seq",
allocationSize = 1)
@GeneratedValue(strategy= GenerationType.IDENTITY, generator="seq-gen")
@Column(name = "uid")
private Long uid;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "bookHeader")
private BookInfo bookInfo;
}
圖書信息:
@Entity
@Table(name="tbookinfo", schema="v2")
public class BookInfo implements Serializable{
@Id //dependent on BookHeader for Id
@OneToOne
@JoinColumn(name="bookid",referencedColumnName="uid")
private BookHeader bookHeader;
}
其次,對於雙向關系 - 正如您在此處所擁有的 - 您必須確保在持久化之前在內存 model 上正確設置關系的雙方。
BookHeader header - new BookHeader();
BookInfo info = new BookInfo();
header.setBookInfo(info);
info.setBookHeader(header);//will fail without this
bookHeaderRepository.save(header);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.