Hibernate - удалить связанный объект - PullRequest
2 голосов
/ 12 августа 2011

У меня есть 2 объекта:

@Entity
@Table(name="product")
public class Product {
    private Long id;
    private Set<Upgrade> upgrade;

    @Id
    @Column(name="id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @ManyToMany(mappedBy = "products",
                targetEntity = Upgrade.class,
                cascade = CascadeType.REFRESH,
                fetch = FetchType.EAGER)
    public Set<Upgrade> getUpgrade() {
        return upgrade;
    }

    public void setUpgrade(Set<Upgrade> upgrade) {
        this.upgrade = upgrade;
    }
}

и

@Entity
@Table(name="upgrade")
public class Upgrade {
    private Long id;
    private Set<Product> products;

    @Id
    @Column(name="id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @ManyToMany(targetEntity = Product.class, cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
    @JoinTable(name = "upgrade_product",
               joinColumns = @JoinColumn(name = "upgrade_id"),
               inverseJoinColumns = @JoinColumn(name="product_id"))
    public Set<Product> getProducts() {
        return products;
    }

    public void setProducts(Set<Product> products) {
        this.products = products;
    }
}

Мои данные создают их так, что продукт содержит набор из нескольких обновлений.

т.е. P1 {U1, U2, U3, U4} P2 {U1, U3, U5, U7}

Если я удаляю обновление, то все в порядке.Это просто удалено из продукта.Тем не менее, если я удаляю продукт, он пытается удалить все связанные обновления.

Как получить это, чтобы иметь возможность удалить продукт и оставить обновления на месте.

1 Ответ

3 голосов
/ 12 августа 2011

Перед удалением Product очистите его Set<Upgrade> и сохраните Product. Что-то вроде:

public void delete(Product p)
{
    p.setUpgrade(Collections.emptySet());
    entityManager.remove(entityManager.merge(p));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...