Добавить новый объект в сохраненную коллекцию - PullRequest
0 голосов
/ 22 января 2010

У меня есть таблицы, связанные в ассоциации «один ко многим»: Продукт * 1 - n * Инвентарь

@Entity
public class Product {
    // Identifier and properties ...

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)   
    public Set<Inventory> getInventories() {
        return inventories;
    }

    public void setInventories(Set<Inventory> inventories) {
        this.inventories = inventories;
    }

    public void addInventory(Inventory inventory) {
        this.inventories.add(inventory);
        inventory.setProduct(this);
    }
}

-

@Entity
public class Inventory {
    // Identifier and properties ...

    private Product product;

    @ManyToOne(cascade = CascadeType.ALL, optional = false)
    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }
}

У меня следующая ситуация:

  1. Я сохраняю продукт с пустым инвентарем
  2. Я загружаю этот продукт
  3. Я добавляю инвентарь к продукту
  4. Я пытаюсь обновить / объединить продукт

Делая это, я получаю следующее исключение:

HibernateSystemException: a different object with the same identifier value was already associated with the session

1 Ответ

2 голосов
/ 22 января 2010

Исключение означает, что в сеансе существует объект с тем же значением столбца @Id, который не совпадает с текущим объектом.

Необходимо переопределить hashCode() и equals() на Inventory (предпочтительно с использованием бизнес-ключа), с помощью которого сеанс узнает, что это один и тот же объект, даже если экземпляр объекта отличается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...