Не можете сохранить более 2 элементов в ArrayList в MySQL с помощью SpringBoot? - PullRequest
0 голосов
/ 17 марта 2019

Я не могу сохранить более 2 элементов в ArrayList в MySQL с помощью SpringBoot.Когда я делаю почтовый запрос (Почтальон или с Alamofire) с одним объектом в массиве, я получаю код состояния 200, в противном случае я получаю код состояния 500 и это сообщение об ошибке в консоли Springboot:

java.sql.SQLIntegrityConstraintViolationException: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (quran-pro-core. surah, CONSTRAINT FKibuxjpjiwpq46220g7sn7y1q FOREIGN KEY (id) ССЫЛКИ reciter (documentid))

Это мои классы:

@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

1 Ответ

0 голосов
/ 17 марта 2019

Ваша 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;
}
  1. или используйте однонаправленное отношение:
 @OneToMany(cascade = CascadeType.ALL)
 private List<Surah> surahs;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...