Hibernate исключение несохраненного экземпляра с использованием @ElementCollection - PullRequest
7 голосов
/ 03 июля 2011

Я получаю исключение

объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом

добавляется следующий код:

public void addThing(String key, String someData) {
    Thing thing = new Thing();
    booking.setData(someData);
    booking.setParent(this);
    bookings.put(key, thing);
}

Родительское сопоставление:

@ElementCollection(fetch=FetchType.EAGER)
@Column(name="thing", nullable=false)
@MapKeyColumn(name="key")
@JoinColumn(name="parent_id")
protected Map<String, Thing> things = Maps.newHashMap();

Дочернее ('Thing') отображение:

@ManyToOne
private Parent parent;

Согласно инструкции Hibernate:

В ElementCollection нет опции каскада, целевые объекты всегда сохраняются, объединяются, удаляются вместе со своим родителем.

Но - до того, как я переключился на новое отображение @ElementCollection, чтобы решить проблему, когда я получал, по-видимому, фантомные элементы, возвращаемые для запроса, этот код работал правильно.

Я знаю, что могу сохранить элемент отдельно, а затем сделать ссылку, но я предпочитаю, чтобы это делалось автоматически, и я подумал, что так оно и должно работать. Есть идеи?

1 Ответ

10 голосов
/ 20 июля 2011

@ElementCollection не предполагается использовать с коллекциями объектов;используется с коллекциями @Embeddable.Если Thing является сущностью, вы не используете @ElementCollection, вы используете @OneToMany.

Из javadoc для @ElementCollection:

Определяет коллекцию экземпляров базового типа или встраиваемого класса

...