gpt4 book ai didi

子项中的 Spring Data JPA 外键不持久

转载 作者:行者123 更新时间:2023-12-04 02:59:16 24 4
gpt4 key购买 nike

我正在尝试使用 spring 数据 CrudRepository 来保留包含几个子实体的父实体,但是当我“保存”父实体时,我无法在子表中获取外键约束 OID 以进行保存。

因此,在下面的示例中,使用提供的 JSON 调用 Controller 将保留一个 Ocean 和 2 个子 Fish。但是,未设置 Fish 表中的 FK OID。

从对 Controller 的 JSON 请求开始,这里是代码。
JSON 请求

{
"name":"Atlantic",
"fishes": [
{
"name": "blue fin tuna"
},
{
"name": "great white shark"
}
]
}

海洋实体
@Entity
public class Ocean {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long oid;
private String name;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy =
"ocean")
private Set<Fish> fishes; //yeah maybe a bad example

鱼实体
@Entity
public class Fish {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long fid;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "oid", nullable = false, updatable = false, insertable =
true)
private Ocean ocean;
private String name;

Controller
@PostMapping("/god/ocean")
public Ocean createOcean(@RequestBody Ocean ocean) throws BadRequestException
{
LOG.info("createOcean()");
return oceanDao.save(ocean);
}

存储库
public interface IOceanDao extends CrudRepository<Ocean, Long> {
}

MySql 表
CREATE TABLE IF NOT EXISTS `mydb`.`OCEAN` (
`OID` INT NOT NULL AUTO_INCREMENT COMMENT '',
`NAME` VARCHAR(45) NOT NULL COMMENT '',
PRIMARY KEY (`OID`) COMMENT '');

CREATE TABLE IF NOT EXISTS `mydb`.`FISH` (
`FID` INT(11) NOT NULL AUTO_INCREMENT COMMENT '',
`OID` INT(11) NULL COMMENT '',
`NAME` VARCHAR(45) NOT NULL COMMENT '',
PRIMARY KEY (`FID`) COMMENT '',
CONSTRAINT `FK_OID`
FOREIGN KEY (`OID`)
REFERENCES `mydb`.`OCEAN` (`OID`));

最佳答案

我遇到了同样的问题,直到 JsonManagedReference 来拯救我。

尝试更改您的实体以包含它们,如下所示:

在海洋实体中:

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = 
"ocean")
@JsonManagedReference
private Set<Fish> fishes;

在鱼实体中:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "oid", nullable = false, updatable = false, insertable =
true)
@JsonBackReference
private Ocean ocean;

我无法找到它为什么会这样工作,所以如果你知道,请告诉我:)

关于子项中的 Spring Data JPA 外键不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50731914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com