Гибернация, автоматически сохраняются зависимые объекты

Я довольно новичок в Hibernate и пытался определить, что он сделает для вас и что он требует от вас.

Большой имеет дело с объектом, у которого есть иждивенцы, которые нет еще существует в базе данных. Например, у меня есть объект Project, который включает в себя поле «Производитель», которое принимает объект «Производитель» в качестве значения. В базе данных у меня есть таблица продуктов со столбцом mfr_id, который 's ссылка на таблицу производителей (довольно типичное однонаправленное отношение «один ко многим»).

Если производитель, назначенный объекту продукта, относится куже в базе данных, то естьНет проблем. Тем не менее, когда я пытаюсь сохранить или обновить объект, который ссылается на производителя, который неЕсли операция не завершена, операция завершается с исключением.

Исключение в теме "Заявка" org.hibernate.TransientObjectException: объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом

Конечно, я могу вручную проверить состояние продукта ».производитель, посмотрев,Поле идентификатора равно нулю и сохраняет его, если оно есть, но это кажется громоздким решением. Поддерживает ли Hibernate автоматически сохраняющихся зависимых, если рассматриваемый зависимый не 'Т еще сохранились? Если так, как я могу включить это поведение? Я'используя версию Hibernate в комплекте с Netbeans (я полагаю, 3.5) и встроенные аннотации для определения поведения отображения. Ниже приведены классы моего продукта и производителя, разделенные на части, которые обрабатывают зависимость. (Продукт расширяет Sellable, который отображается на продаваемую таблицу, используя JOINED в качестве стратегии наследования.та таблица, которая содержит первичный ключ, который идентифицирует продукт)

@Entity
@Table (
        name="products",
        schema="sellable"
)
public abstract class Product extends Sellable {
    private Manufacturer                        manufacturer;

    @ManyToOne (fetch = FetchType.EAGER)
    @JoinColumn (name = "mfr_id")
    public Manufacturer getManufacturer () {
        return this.manufacturer;
    }

    /**
     * 
     * @param manufacturer 
     */
    public Product setManufacturer (Manufacturer manufacturer) {
        this.manufacturer   = manufacturer;
        return this;
    }
}

Зависимый производитель

@Entity
@Table (
        name="manufacturers",
        schema="sellable",
        uniqueConstraints = @UniqueConstraint(columnNames="mfr_name") 
)
public class Manufacturer implements Serializable {
    private Integer         mfrId       = null;
    private String          mfrName     = null;

    @Id
    @SequenceGenerator (name = "manufacturers_mfr_id_seq", sequenceName = "sellable.manufacturers_mfr_id_seq", allocationSize = 1)
    @GeneratedValue (strategy = GenerationType.SEQUENCE, generator = "manufacturers_mfr_id_seq")
    @Column (name="mfr_id", unique=true, nullable=false)
    public Integer getMfrId () {
        return mfrId;
    }

    private Manufacturer setMfrId (Integer mfrId) {
        this.mfrId  = mfrId;
        return this;
    }

    @Column(name="mfr_name", unique=true, nullable=false, length=127)
    public String getMfrName () {
        return mfrName;
    }

    public Manufacturer setMfrName (String mfrName) {
        this.mfrName = mfrName;
        return this;
    }
}

ОБНОВЛЕНИЕ: я попробовал следующее изэтот вопрос, но я все еще получаю исключение временного объекта.

@ManyToOne (fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})

Я также проверил, какая версия Hibernate входит в комплект Netbeans,с 3.2.5

ОБНОВЛЕНИЕ 2: я обнаружил, что следующее, кажется, работает, как я хотел.

@ManyToOne (fetch = FetchType.EAGER, cascade = CascadeType.ALL)

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

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

@ManyToOne (fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})

Я видел CascadeType.SAVE_UPDATE, упомянутый в нескольких местах, но этот режим неПохоже, что он доступен в версии Hibernate, которая поставляется с Netbeans.

Ответы на вопрос(1)

Ваш ответ на вопрос