Я пытаюсь использовать пружинные данные CrudRepository для сохранения родительской сущности, которая включает в себя несколько дочерних сущностей, однако у меня возникают проблемы с получением OID ограничения внешнего ключа в дочерней таблице для сохранения, когда я "сохраняю" родительскую сущность.
Таким образом, в приведенном ниже примере вызов контроллера с предоставленным JSON сохранит Ocean и 2 дочерних Fish.Однако FK OID в таблице Fish не устанавливается.
Начиная с JSON-запроса к контроллеру, вот код.JSON REQUEST
{
"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;
РЕГУЛЯТОР
@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 TABLES
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`));