gpt4 book ai didi

java - 双向 onetomany 不更新外键

转载 作者:行者123 更新时间:2023-12-02 10:42:55 29 4
gpt4 key购买 nike

我已经使用 hibernate 注释实现了双向 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();
}

这会在 cart 表中插入 1 条记录,在 items 表中插入 2 条记录。但是,项目表中的 cart_id 列不会更新。知道为什么吗?

我已经根据以下示例实现了这一点: https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/

最佳答案

正如 Vlad Mihalcea 在他的精彩文章中所解释的那样:...您需要 synchronize both end of the bidirectional association

对于您在 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);
}

关于java - 双向 onetomany 不更新外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52805107/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com