[英]Hibernate manyToMany only persist
我想在Hibernate中創建一個僅以“ persist”作為級聯類型的manyToMany-Relation。
我的用餐課程如下所示:
public class Meal {
@ManyToMany(cascade = {CascadeType.PERSIST})
@JoinTable(name="meal_ingredient_relation",
joinColumns={@JoinColumn(name="meal_id")},
inverseJoinColumns={@JoinColumn(name="ingredient_id")})
private Set<Ingredient> ingredients = new HashSet<>();
...
}
我的配料課看起來像這樣:
public class Ingredient {
@ManyToMany(mappedBy = "ingredients", cascade = {CascadeType.PERSIST})
private Set<Meal> meals = new HashSet<>();
...
}
如果我想用一些食材做飯
SessionFactory sf = HibernateUtil.getSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
Ingredient ingredient1 = new Ingredient("in1");
Ingredient ingredient2 = new Ingredient("in2");
Meal meal1 = new Meal("meal1", 100);
Meal meal2 = new Meal("meal2", 200);
meal1.getIngredients().add(ingredient1);
meal1.getIngredients().add(ingredient2);
meal2.getIngredients().add(ingredient1);
session.save(meal1);
session.save(meal2);
我收到以下錯誤:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: hibernate.entities.Ingredient
您必須在Meal
類中為setIngredients
添加注釋:
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
或者,如果您使用的是XML映射:
<set name="ingredients" cascade="save-update, delete" ...
顯然,僅在需要時才使用DELETE
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.