我想知道为什么Hibernate不将外键插入数据库。
我在2个类之间有一个OneToMany和ManyToOne关系。
@Entity
@Data
public class Bestelling {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JoinColumn(name = "bestelling_id")
private long bestellingID;
private Date bestelDatum;
@ManyToOne
@JoinColumn(name = "account_id")
private Account accountID_fk;
@JoinColumn(name = "adres_id")
@OneToOne
private Adres afleverAdres;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "bestelling")
private List<Bestellingsregel> bestellingsregels = new ArrayList<>();
}
AND
@Entity
@Data
public class Bestellingsregel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JoinColumn(name = "bestellingsregel_id")
private long bestellingsregelID;
private int aantal;
private double prijs;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "bestelling_id")
private Bestelling bestelling;
@OneToOne
@JoinColumn(name = "product_id")
private Product productID;
}
我正在使用Postman将数据插入MySql数据库:
{
"bestelDatum" : "2019-02-28",
"accountID_fk" : {
"accountID" : 1
},
"afleverAdres" : {
"adres_id" : 1
},
"bestellingsregels" : [
{ "aantal" : 5,
"prijs" : 100.50,
"productID" : { "productID" : 1 }
}
]
}
它正在插入数据库。唯一的问题是,它没有在表Bestellingsregel中设置bestelling_id。知道我在这里做错了吗?
谢谢。
编辑:
我使用的是Spring,而crud函数位于该界面中:
public interface BestellingRepository extends JpaRepository<Bestelling, Long> {
}
答案 0 :(得分:1)
您将Bestelling和Bestellingsregel之间的关系定义为双向的,并且在Bestellingsregel中拥有拥有方(握住外键),这是正确的,但有利有弊。
您有以下选择:
使您的关系成为单向的:从Bestellingsregel中删除Bestelling参考并重新定义我们的await
关系
observer
答案 1 :(得分:0)
Bestelling b = new Bestelling();
Bestellingsregel br = new Bestellingsregel();
br.setBestelling(b);
List<Bestellingsregel> list = new ArrayList<>();
list.add(br);
b.setBestellingsregels(list);
repo.save(b);
这对我有用。我猜您不是在Bestellingsregel对象中设置Bestelling对象。