JPA многие ко многим удалить сущность - PullRequest
0 голосов
/ 06 сентября 2018

Я использую Hibernate (через JPA ). Есть способ удалить сущность:

    public void delete(final ID id) {    entityManager.createQuery(String.format("delete from %s e where e.id = :id", entityClass.getSimpleName()))
.setParameter("id", id).executeUpdate();
    }

Я удаляю сущность (с отношением many2many):

Журналы гибернации:

Hibernate: delete from author_to_book where (author_id) in (select id from author where id=?)
Hibernate: delete from author where id=?

Кто отвечает за удаление ассоциаций из таблицы привязок? В конце концов, мой код определяет только удаление из основной таблицы. Как это работает?

Отображение:

@Entity
public class Author extends BaseEntity implements IAuthor {

@Column
private String name;

@JoinTable(name = "author_to_book",
        joinColumns =  {@JoinColumn(name = "author_id")} ,
        inverseJoinColumns = {@JoinColumn(name = "book_id")}
)
@ManyToMany(targetEntity = Book.class, fetch = FetchType.LAZY)
@OrderBy("title ASC")
private Set<IBook> books = new HashSet<>();

Книга сущность не имеет сопоставления с Автор сущность

1 Ответ

0 голосов
/ 07 сентября 2018

Использование строки для создания запроса SQL не очень хорошая идея для JPA. Следует использовать JPQL или Criteria API. Обычно владеющая сторона ассоциации отвечает за удаление строк из таблицы соединений. Для двунаправленных отношений строки в таблицах соединения также могут быть удалены с другой стороны. Это действительно зависит от реализации JPA. Насколько я знаю, CMobileCom JPA может управлять таблицами соединения с обеих сторон.

Отказ от ответственности: я являюсь разработчиком CMobileCom JPA , облегченной реализации JPA для Android и Java JDBC.

...