我正在使用数据库编写我的第一个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 */;
答案 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;