java - 无法使用 Spring Boot 将 ArrayList 中超过 2 个元素保存到 MySQL?

标签 java mysql sql spring-boot arraylist

我无法使用 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, CONSTRAINT FKibuxjpjiwpq46220g7sn7y1q FOREIGN KEY (id) REFERENCES reciter (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元素必须用于指定作为关系所有者的实体的关系字段或属性

  1. 第一个建议,使用双向关系:
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/

    相关文章:

    java - JTextField 未出现在网格布局中

    MySQL - 从两列中查找重复数据

    mysql - DATE_SUB(CURDATE(),间隔 7 天)

    mysql - Laravel 在 Null 上加入

    java - 在 list 文件中定义外部 jar 的正确方法

    java - 请求基类中的方法

    sql - SQL Server 2008 中的代码对齐?

    mysql - 优先考虑版本存在的某些行

    java - 在一个函数中将具有不同数据类型的不同集合转换为由指定分隔符分隔的字符串

    php - CodeIgniter 从数据库中获取最近输入的行并在 Controller 中使用它