我已经使用休眠注释实现了双向 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);
}
添加回答
举报
0/150
提交
取消