Reputation: 33
I'm writing my first Spring MVC application using database.
I'm trying to save Set <Pozycja> pozycja
to database but i have a problem because everything is saved properly without Set <Pozycja> pozycja
. In database Pozycja table is empty.Could anybody help me?
@Entity
@Table(name = "Zamowienie")
public class Zamowienie implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idZamowienie;
@OneToMany(mappedBy="zamowienie", cascade=CascadeType.PERSIST)
private Set <Pozycja> pozycja;
}
Here is my Pozycja entity:
@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;
@ManyToOne
@JoinColumn(name = "Zamowienie_idZamowienie", insertable = false, updatable = false)
private Zamowienie zamowienie;
}
And here is my code to save Set in Zamowienie:
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);
Why it doesn't work properly?
EDIT: Now I have problem with:
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)
Pozycja int DataBase:
ROP 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 */;
Upvotes: 0
Views: 174
Reputation: 1379
Change your Entities like below:
Zamowienie Entity
@OneToMany(mappedBy="zamowienie", cascade=CascadeType.ALL,fetch = FetchType.LAZY)
private Set <Pozycja> pozycja = new HashSet<Pozycja>(0);
Pozycja Entity
@ManyToOne
@JoinColumn(name = "Zamowienie_idZamowienie", nullable=false)
private Zamowienie zamowienie;
Upvotes: 1