为了账号安全,请及时绑定邮箱和手机立即绑定

双向onetomany不更新外键

双向onetomany不更新外键

饮歌长啸 2021-11-17 15:30:40
我已经使用休眠注释实现了双向 OneToMany 关联。以下是我的代码:@Entity@Table(name="Cart")public class Cart {  @Id  @GeneratedValue(strategy=GenerationType.IDENTITY)  @Column(name="id")  private int id;  @Column(name="name")  private String name;  @OneToMany(cascade=CascadeType.ALL, mappedBy="cart")  private List<Item> items;  //getters and setters}以下是 Item 类:@Entity@Table(name="Item")public class Item {  @Id  @GeneratedValue(strategy=GenerationType.IDENTITY)  @Column(name="id")  private int id;  @Column(name="name")  private String name;  @ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)  @JoinColumn(name="cart_id")  private Cart cart;  //getters and setters}以下代码保存数据:public static void saveCart(Session session) {    Transaction tx = session.beginTransaction();    Cart c1 = new Cart();    c1.setName("Cart 1");    Item item1 = new Item();    item1.setName("item1");    Item item2 = new Item();    item2.setName("item2");    List<Item> items = new ArrayList<Item>();    items.add(item1);    items.add(item2);    c1.setItems(items);    session.save(c1);    tx.commit();}这将在购物车表中插入一条记录,在项目表中插入 2 条记录。然而,商品表中的cart_id 列并未更新。知道为什么吗?我已经根据以下示例实现了这一点:https : //vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

正如 Vlad Mihalcea 在他的伟大文章中解释的那样:...您需要同步双向关联的两端。


对于您的情况,session.save(c1);您应该添加:


item1.setCart(c1);

item2.setCart(c1);

或者,最好在您的Cart类中创建辅助方法,例如:


public void addItem(Item item) {

    items.add(item);

    item.setCart(this);

}


public void removeItem(Item item) {

    items.remove(item);

    item.setCart(null);

}


查看完整回答
反对 回复 2021-11-17
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

在您的 Cart 实体中,id 的列名称必须是 car_id,因为在您的 Item 类中,您将它用于 JoinColumn。他们都应该有相同的名字。


查看完整回答
反对 回复 2021-11-17
  • 2 回答
  • 0 关注
  • 253 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信