Spring MVC - 无法添加或更新子行

时间:2016-01-28 16:43:32

标签: database spring model-view-controller

我正在使用数据库编写我的第一个Spring MVC应用程序。 我正在尝试将Set <Pozycja> pozycja保存到数据库,但我遇到了问题,因为没有Set <Pozycja> pozycja所有内容都已正确保存。在数据库Pozycja表中是空的。有人可以帮帮我吗?

@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;
}

这是我的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;
        @ManyToOne
        @JoinColumn(name = "Zamowienie_idZamowienie", insertable = false, updatable = false)
        private Zamowienie zamowienie;
    }

这是我在Zamowienie中保存Set的代码:

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);

为什么它不能正常工作?

编辑:现在我遇到问题:

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 */;

1 个答案:

答案 0 :(得分:1)

更改您的实体,如下所示:

Zamowienie实体

 @OneToMany(mappedBy="zamowienie", cascade=CascadeType.ALL,fetch = FetchType.LAZY)
 private Set <Pozycja> pozycja = new HashSet<Pozycja>(0);

Pozycja实体

 @ManyToOne
 @JoinColumn(name = "Zamowienie_idZamowienie", nullable=false)
 private Zamowienie zamowienie;