我无法使用 SpringBoot 将 ArrayList 中超过 2 个元素保存到 MySQL。当我使用数组中的一个对象发出发布请求(Postman 或使用 Alamofire)时,我会得到状态代码 200,否则我会在 springboot 控制台中得到状态代码 500 和此错误消息:
java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (
quran-pro-core
.surah
, CONSTRAINTFKibuxjpjiwpq46220g7sn7y1q
FOREIGN KEY (id
) REFERENCESreciter
(documentid
))
这些是我的类(class):
@RestController
public class ReciterController {
@Autowired
private ReciterService reciterService;
@PostMapping("/reciters")
public String saveReciter(@RequestBody Reciter reciter) {
reciterService.saveReciter(reciter);
return "SUCCESS";
}
}
@Service
public class ReciterService {
@Autowired
private ReciterRepostitory reciterRepository;
public void saveReciter(Reciter reciter) {
reciterRepository.save(reciter);
}
}
@Entity
public class Reciter {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long documentID;
@Column
private String name;
@Column
private String image;
@OneToMany(mappedBy="id", cascade = CascadeType.ALL)
private List<Surah> surahs;
// Constructor and getters and setters
}
@Entity
public class Surah {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column
private int number;
// Constructor and getters and setters
}
这个机构的工作原理:
{
"name": "reciter1",
"image": "/reciter1/image.png",
"surahs": [
{
"name": "LOLll",
"number": 0
}
]
}
这不是:
{
"name": "reciter1",
"image": "/reciter1/image.png",
"surahs": [
{
"name": "LOLll",
"number": 0
},
{
"name": "test2",
"number": 1
}
]
}
enter code here
最佳答案
您的ManyToOne
配置不正确,mappedBy
元素必须用于指定作为关系所有者的实体的关系字段或属性
- 第一个建议,使用双向关系:
public class Reciter {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long documentID;
@Column
private String name;
@Column
private String image;
@OneToMany(mappedBy="reciter", cascade = CascadeType.ALL)
private List<Surah> surahs;
// Constructor and getters and setters
}
@Entity
public class Surah {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column
private int number;
@ManyToOne
private Reciter reciter;
}
- 或使用单向关系:
@OneToMany(cascade = CascadeType.ALL)
private List<Surah> surahs;
关于java - 无法使用 Spring Boot 将 ArrayList 中超过 2 个元素保存到 MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202566/