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

Я вернулся на JPA очень давно, и я забыл больше всего.У меня есть такой сценарий:

@Entity
@Table(name = "tablea")
public class TableA implements Serializable {
  ...
  @OneToMany(mappedBy = "taba", CascadeType.ALL, fetch = FetchType.EAGER)
  @JoinColumn(name = "id")
  List<TableB> tableb;
}

@Entity
@Table(name = "tableb")
public class TableB implements Serializable {
  ...
  @ManyToOne
  @JoinColumn(name = "id_tablea")
  TableA taba;

  @OneToOne
  @JoinColumn(name = "id_tablec")
  TableC tabc;
}

@Entity
@Table(name = "tablec")
public class TableC implements Serializable {
  ...
}

Как видите, TableB - это таблица ассоциаций, которую я использую для хранения ссылок между TableA и TableC и еще немного информации.Поскольку я добавляю или изменяю объекты TableB, инкапсулированные в моем экземпляре TableA, менеджер сущностей объединяет объект, как я ожидаю, база данных обновляется соответствующим образом.Допустим, у меня есть TableA объект, который инкапсулирует 3 TableB объектов в его атрибуте tableb.Я удаляю один из элементов в tableb, затем перемещаю (сериализуем / десериализирую) объект TableA в диспетчер сущностей, чтобы выполнить entitymanager.merge(tableainstance), но когда я смотрю базу данных, все записи 3 TableBвсе еще там.Я не ожидал найти их, что не так?Я использую JPA 2.0, eclipselink 2.5.0.

1 Ответ

0 голосов
/ 22 октября 2018
  1. Поскольку TableB находится на стороне владельца отношения OneToMany, удалите ссылку на TableA из TableB.
    tableBInstance.taba=null;

  2. Очистить кеши после слияния.
    entitymanager.getEntityManagerFactory().getCache().evictAll();

...