猿问

双向onetomany不更新外键

我已经使用休眠注释实现了双向 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/


饮歌长啸
浏览 262回答 2
2回答

拉丁的传说

正如 Vlad Mihalcea 在他的伟大文章中解释的那样:...您需要同步双向关联的两端。对于您的情况,session.save(c1);您应该添加:item1.setCart(c1);item2.setCart(c1);或者,最好在您的Cart类中创建辅助方法,例如:public void addItem(Item item) {&nbsp; &nbsp; items.add(item);&nbsp; &nbsp; item.setCart(this);}public void removeItem(Item item) {&nbsp; &nbsp; items.remove(item);&nbsp; &nbsp; item.setCart(null);}

摇曳的蔷薇

在您的 Cart 实体中,id 的列名称必须是 car_id,因为在您的 Item 类中,您将它用于 JoinColumn。他们都应该有相同的名字。
随时随地看视频慕课网APP

相关分类

Java
我要回答