Прежде всего, извините, если мой английский не самый лучший, но я сделаю все возможное, чтобы объяснить мою проблему.
На самом деле я пытаюсь сохранить объект в моей базе данных, но у меня естьPSQLException, сказав, что я не могу сохранить без сохранения моего первого объекта (проблема внешнего ключа).
Итак, у меня есть объект, Миссия, которая содержит Фрейс.Вот мой класс:
@Entity
@Table(name = "T_MISSION")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Getter
@Setter
@NoArgsConstructor
public class Mission implements Serializable {
private static final long serialVersionUID = -8050548742704457221L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "t_mission_t_frais", joinColumns = {
@JoinColumn(name = "fraiss_id") }, inverseJoinColumns = {
@JoinColumn(name = "missions_id", referencedColumnName = "id") })
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Frais> fraiss = new HashSet<>();
}
Вот мой класс "Frais":
@Entity
@Table(name = "T_FRAIS")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Getter
@Setter
@NoArgsConstructor
public class Frais implements Serializable {
private static final long serialVersionUID = -4881527916470482329L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToMany(mappedBy = "fraiss")
private Set<Mission> missions = new HashSet<>(0);
}
Как вы можете видеть, когда я пытаюсь сохранить новую миссию, я хочу сохранить свои данныев таблице базы данных с именем 't_mission_t_frais', которая содержит fraiss_id и missions_id.
Но пока я не могу сохранить ее причину этой ошибки: 'org.postgresql.util.PSQLException: ERROR: оператор вставки или обновления втаблица "t_mission_t_frais" нарушает внешнее ограничение ключа "fk_frais_mission_id". Подробно: Ключ (missions_id) = (60261) отсутствует в таблице "t_mission". '
Вот мой сервис MissionService:
@Service
@Transactional
public class MissionService {
@Autowired
private MissionRepository missionRepository;
public void save(Mission mission) {
missionRepository.save(mission);
}
}
Поскольку я новичок в Java, я думаю, что что-то не так настроил в своем классе Миссии, но я думаю, что моя миссия не была сохранена первой (до первой), которая блокирует транзакцию сохранения ...
Я уже пытался заменить 'save' на 'saveAndFlush' и делать другие вещи без результата, который я хотел бы ...
Можете ли вы, ребята, помочь мне, если у вас есть какие-нибудь идеи?
РЕДАКТИРОВАТЬ:
моя миссия создается с помощью фронтального приложения (Angular) и отправляется в формате JSON.Вот пример:
id: 67114,
fraiss: [
{
actif: true
fraisType: {id: 44881, libelle: "Indemnité", actif: true}
actif: true
id: 44881
libelle: "Indemnité"
id: 60261
libelle: "53,50€ par nuité"
missions: []
},
{
actif: true
fraisType: {id: 136, libelle: "Frais", actif: true}
actif: true
id: 136
libelle: "Frais"
id: 23986
libelle: "54€ par jour"
missions: []
}
]
@RequestMapping(value = "/rest/manage/missions", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public void create(@RequestBody Mission mission) {
log.debug("REST request to save Mission : {}", mission);
missionService.save(mission);
}