Próbuje zapisać dane do bazy jednak mam problem z pewnym błędem. Szukałem już dużo w internecie i nie znalazłem rozwiązania. Mógłby ktoś pomóc mi go rozwiązać?
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`mydb`.`pozycja`, CONSTRAINT `fk_Pozycja_Zamowienie2` FOREIGN KEY (`Zamowienie_idZamowienie`) REFERENCES `zamowienie` (`idZamowienie`) ON DELETE NO ACTION ON UPDATE NO ACTION)
Tabela Pozycja:
DROP TABLE IF EXISTS `pozycja`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `pozycja` (
`idPozycja` int(11) NOT NULL AUTO_INCREMENT,
`Zamowienie_idZamowienie` int(11) NOT NULL,
`Produkt_idProdukt` int(11) NOT NULL,
PRIMARY KEY (`idPozycja`),
KEY `fk_Pozycja_Zamowienie2_idx` (`Zamowienie_idZamowienie`),
KEY `fk_Pozycja_Produkt1_idx` (`Produkt_idProdukt`),
CONSTRAINT `fk_Pozycja_Produkt1` FOREIGN KEY (`Produkt_idProdukt`) REFERENCES `produkt` (`idProdukt`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_Pozycja_Zamowienie2` FOREIGN KEY (`Zamowienie_idZamowienie`) REFERENCES `zamowienie` (`idZamowienie`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
Kod odpowiedzialny za zapis danych:
Set<Pozycja> products = new HashSet<>();
if (order.getCart()!=null && order.getCart().getCartItems().size()>0) {
for (Map.Entry<Integer, CartItem> entry : order.getCart().getCartItems().entrySet())
{
Pozycja pozycja = new Pozycja();
pozycja.setProdukt_idProdukt(entry.getValue().getProduct().getIdProdukt());
pozycja.setProdukt(entry.getValue().getProduct());
products.add(pozycja);
}
}
zamowienie.setPozycja(products);
zamowienie.setKlient(klient);
zamowienieRepository.save(zamowienie);
Encje:
@Entity
@Table(name="Klient")
public class Klient implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int idKlient;
@OneToMany(mappedBy="klient", fetch = FetchType.EAGER, cascade=CascadeType.ALL)
private Set <Zamowienie> zamowienie;
@Entity
@Table(name = "Zamowienie")
public class Zamowienie implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idZamowienie;
@ManyToOne(cascade=CascadeType.PERSIST)
private Klient klient;
@OneToMany(mappedBy="zamowienie", cascade=CascadeType.PERSIST)
private Set <Pozycja> pozycja;
@Entity
@Table(name="Pozycja")
public class Pozycja implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int idPozycja;
private int Produkt_idProdukt;
private int Zamowienie_idZamowienie;
@OneToOne
@JoinColumn(name = "Produkt_idProdukt", insertable = false, updatable = false)
private Product produkt;
@ManyToOne
@JoinColumn(name = "Zamowienie_idZamowienie", insertable = false, updatable = false)
private Zamowienie zamowienie;