java - Spring boot JPA决定实体的级联顺序
问题描述
我有3个实体类定义如下:
@Entity
public class Rimorchio {
@Id
@GeneratedValue
private long idrimorchio;
@Column(unique = true)
private String targa;
// .... Getters and Setters
}
@Entity
public class Atk {
@Id
@GeneratedValue
private long idatk;
@Column(unique = true)
private String codice;
@Column(unique = true)
private String targa;
@OneToOne
private Rimorchio suggerito;
// .... Getters and Setters
}
@Entity
public class Trasportatore {
@Id
@GeneratedValue
private long idtrasportatore;
@Column(unique = true)
private String nometrasportatore;
@OneToMany(cascade = {CascadeType.PERSIST})
private List<Rimorchio> listarimorchi;
@OneToMany(cascade = {CascadeType.PERSIST})
private List<Atk> listaatk;
@OneToMany(cascade = {CascadeType.PERSIST})
private List<Autista> listaautisti;
// .... Getters and Setters
}
当我尝试将 Trasportatore 类保存在数据库中时,我收到以下错误:
org.hibernate.TransientPropertyValueException: object references an unsaved transient instance -
save the transient instance before flushing :
com.petroli.gestionefasipetroli.entities.Atk.suggerito ->
com.petroli.gestionefasipetroli.entities.Rimorchio
所以,我必须在 Atk 实例之前保存 Rimorchio 实例。我有一个结构,它有一个扩展 JpaRepository 的存储库和一个简单调用的服务
repository.saveAndFlush(trasportatore);
如何确定插入数据库的顺序以避免此问题?或者有另一种解决方案(可能避免手动级联操作)来实现这个目标?
解决方案
推荐阅读
- google-apps-script - Gmail 删除脚本超时
- c++ - 为什么 numpy 的 cumsum 比手动 C++ 的循环快得多?
- sql - 如何获取每条记录的匹配 ID?
- clojure - 当我部署到 clojars 时,应该将 org.clojure/clojure 添加还是删除到 :dependencies?
- amazon-web-services - 如何保护 Pact Broker、消费者和提供者之间的通信
- javascript - 流式视频文件仍在下载 NodeJS
- mysql - 如何使用内部联接(MySQL)在两个查询之间进行连接?
- json - 颤振飞镖处理json
- ios - 哪个版本的Xcode有iOS 13.7模拟器
- python - 在另一个df中查找一行的所有单元格,如果所有单元格都存在,则返回标志使用pandas