session.save () не работает, если Каскадный тип не Все? - PullRequest
0 голосов
/ 05 января 2019
public class Instructor{
    @OnetoOne(cascade=CascadeType.Persist)
    @JoinColumn(name="instructor_detail")
    public InstructorDetail detail;
}

стратегия - это стратегия = GenerationType.IDENTITY для обеих баз данных - это mysql когда я создаю 2 переходных объекта для обоих этих классов и устанавливаю InstructorDetail внутри Instructor и использую session.save (instructor).

Я получаю сообщение об ошибке "объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом:", но когда я использую session.persist (инструктор), оба объекта сохраняются в БД?

В чем разница между сохранением и сохранением по отношению к CascadeType?

1 Ответ

0 голосов
/ 05 января 2019

Вы можете найти информацию в документации по API Java Hibernate Session:

/**
 * Make a transient instance persistent. This operation cascades to associated
 * instances if the association is mapped with {@code cascade="persist"}
 * <p/>
 * The semantics of this method are defined by JSR-220.
 *
 * @param object a transient instance to be made persistent
 */
void persist(Object object);

Так что этот метод работает, потому что вы определили @OnetoOne (cascade = CascadeType.Persist)

/**
 * Persist the given transient instance, first assigning a generated identifier. (Or
 * using the current value of the identifier property if the <tt>assigned</tt>
 * generator is used.) This operation cascades to associated instances if the
 * association is mapped with {@code cascade="save-update"}
 *
 * @param object a transient instance of a persistent class
 *
 * @return the generated identifier
 */
Serializable save(Object object);

Итак, чтобы это работало, вы должны добавить каскадное сохранение-обновление. НО: save-update специфично для Hibernate, а не для JPA. Так что не стоит использовать save.

И лучше вообще не использовать Hibernate Session, а вместо этого использовать JPA EntityManager.

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