Hibernate / jpa多对多

时间:2012-04-12 19:22:15

标签: java spring hibernate jpa

我有2张比萨饼和浇头,

   class pizza{
...
    @ManyToMany(targetEntity = com.pizzastudyds.db.bean.Topping.class, fetch = FetchType.EAGER)
        @JoinTable(name = "PIZZATOPPING", joinColumns = @JoinColumn(name = "PIZZAID"), inverseJoinColumns = @JoinColumn(name = "TOPPINGID"))
        public Set<Topping> getToppings() {
            return toppings;
        }
...
    } 

class toppings{
@ManyToMany(mappedBy = "toppings", targetEntity = com.pizzastudyds.db.bean.Pizza.class)
    public Set<Pizza> getPizzas() {
        return pizzas;
    }
}

当我为比萨饼定义浇头时,这2个类别有很多对比关系。然后尝试删除我能够这样做的披萨,但是当我删除顶部对象时,如果在tooping和披萨之间存在关系。然后我无法删除顶部并获得约束viloation的例外。

我想要删除披萨和不论关系如何,都是单独打顶的;我想更新连接表以及从双方删除。我怎么能这样做?

其实我想要的是分别删除披萨和顶部,即;就像我删除披萨它被删除并更新连接表类似当我删除顶部它被删除更新连接表中的关系。我不是说如果我删除打顶,比萨饼会被删除或者反之亦然。

1 个答案:

答案 0 :(得分:0)

@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)

双面添加。我希望这能解决你的问题。