Jack937
Jack937

Reputation: 33

Spring MVC - Cannot add or update a child row

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

Answers (1)

arch
arch

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

Related Questions