spring-boot - 未使用 @MapsId 找到父键
问题描述
我将 Java8、SpringBoot 2.3.7 和 JPA 与 Oracle 一起使用
有这张旧表(我不能碰它,因为它正在与其他应用程序一起生产)
TRANSFE (TRA_ID_PK NUMBER, ACCOUNT_ID NUMBER, .... )
CONSTRAINT "TRANSFE_UNIQUE" UNIQUE ("TRA_ID_PK")
在我的新应用程序中,一些新的 Transfe 将是 TransfeIn,只有一个字段,所以我创建了这个表
TRANSFE_IN (ID NUMBER, ....)
CONSTRAINT "TRANSF_IN_PK" PRIMARY KEY ("ID")
Jpa 一切正常:
@Entity
@Table(name = "TRANSFE")
public class Transfe implements Serializable {
@Id
@Column(name = "TRA_ID_PK")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_TRANSFES")
@SequenceGenerator(name="SEQ_SW_TRANSFERENCIAS", sequenceName="SEQ_TRANSFES", allocationSize=1)
private Long id;
@ManyToOne
@JoinColumn(name = "TRA_ID")
private Account account;
@OneToOne(cascade = {CascadeType.ALL})
@PrimaryKeyJoinColumn
private TransfeIn transfeIn;
和
@Entity
@Table(name = "TRANSFE_IN")
public class TransferenciaEntrant {
@Id
private Long id;
@MapsId
@OneToOne(cascade = {CascadeType.ALL}, mappedBy = "transfeIn")
@JoinColumn(name = "id")
private Transfe transfe;
当我将其添加到 TRANSFE_IN 时出现问题
CONSTRAINT "TRANSFE_IN_FK" FOREIGN KEY ("ID") REFERENCES "TRANSFE" ("TRA_ID_PK")
所以当有一个新的 TransfeIn 存储时
accountRepository.save(account)
(帐户有一个 @OneToMany(mappedBy = "account", cascade = CascadeType.ALL) 列表转帐),我得到
SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (TRANSFE_ENTR_FK) violated - parent key not found
在日志中,我可以看到如何插入具有正确 ID(取自 SEQ_TRANSFES)的新 TRANSFE_IN 行。但是表 TRANSFE 是空的。
我究竟做错了什么?我不应该使用FK吗?或者注释中有什么要更改的?
解决方案
推荐阅读
- java - 需要解释这个 UML 模型
- c++ - 如何使用我创建的 map 函数来打印数组的值
- php - 使用 php、ffmpeg 和 proc_open 逐帧读取视频
- python - 有没有办法扫描目录以查看有多少特定类型的文件?
- docker - Docker 构建未检测到 React 生产构建文件中的更改
- facebook - 无法使用 Graph API 查询 Instagram 用户
- php - 如何在数组中找到下一个较大的数字和下一个较小的数字
- javascript - 有人可以告诉我为什么我的变量在函数之外而不是在函数内部工作
- reactjs - React-router 将错误的组件与类似的匹配匹配
- python - 在具有 dna 序列的字典中查找重复次数最多的子字符串