【发布时间】:2020-03-09 16:08:28
【问题描述】:
我是 Spring JPA 的新手,正在努力保存对象
'表'
- 父表
书头
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 获取对象,并使用 GSON 将 josn 转换为对象。
现在我正在尝试通过 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。
【问题讨论】:
标签: spring-boot spring-data-jpa spring-data hibernate-mapping