JPA: неявные каскады для отношений, отображаемых как @ManyToMany @JoinTable? - PullRequest
4 голосов
/ 17 марта 2012

У меня есть следующее сопоставление:

@Entity
@Table(name = "Prequalifications")
public class Prequalification implements Serializable
{
    ...

    @ManyToMany
    @JoinTable(name = "Partnerships", joinColumns = @JoinColumn(name = "prequalification_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "company_id", referencedColumnName = "id"))
    private Set<Company> companies;

    ...
}

В сопоставленных отношениях @ManyToMany + @JoinTable не является ли это неявным, что ассоциация (ссылка) сущности (здесь Partnerships)автоматически сохраняются, удаляются и т. д., хотя по умолчанию

отношения имеют пустой каскадный набор

?Приведенная выше цитата была взята из "Pro JPA 2, Mike Keith".

Выполнение

em.merge(prequalification);

на вышеуказанном объекте сохраняет связанные партнерства без какого-либо каскадауказанные типы.

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

1 Ответ

13 голосов
/ 22 марта 2012

Строки в объединяемой таблице будут вставлены / удалены как часть объекта-владельца (если двунаправленная сторона без mappedBy). Поэтому, если вы сохраните, удалите или обновите предварительную квалификацию, строки таблицы объединения также будут вставлены или удалены.

Целевые объекты Компании не будут каскадироваться. Таким образом, при удалении () они не будут удалены, если список будет обновлен, они не будут удалены, если не установлен orphanRemovla. Persist также не должен каскадироваться, но то, что происходит, когда у вас есть ссылки на «отдельные» объекты, является чем-то вроде серой области. Технически должна быть выдана ошибка, поскольку объект является новым, и отношения не были сохранены каскадно. Он также может попытаться вставить и получить ошибку ограничения. Он не должен каскадно сохраняться, хотя технически объектная модель находится в недопустимом состоянии, поэтому то, что происходит, может зависеть от поставщика.

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