Я вернулся на 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
.