У меня возникла проблема при обновлении таблицы много-много. Сохранить работает нормально, но не обновляется. При обновлении удаляются старые записи, но новые записи не вставляются.Hibernate ManytoMany Проблема с обновлением @JoinTable
Просто краткое введение о таблицах:
Родитель Таблица - MainTable
Lk Таблица - LK (LK имеет FK_Type, которая является другой поиск)
ManytoMany - Test_Many
TEST_MANY Таблица имеет три столбца:
1.FK_MAINID
2.FK_LK_ID
3.FK_LKTYPE
Все три колонки являются PK из TEST_MANY. Второй и третий столбцы представляют собой столбцы PK из таблицы LK, а первый столбец - столбец PK в главной таблице.
Пожалуйста, найдите код ниже.
Entity:
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY)
@JoinTable(name = "TEST_MANY", joinColumns = {
@JoinColumn(name = "FK_MAINID", referencedColumnName = "PK_MAINID", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "FK_LKID", referencedColumnName = "ID", nullable = false, updatable = false),
@JoinColumn(name = "FK_LKTYPE", referencedColumnName = "FK_TYPE", nullable = false, updatable = false)}
)
private List<LK> lookups;
В DAO:
Session session = this.sessionFactory.getCurrentSession();
MainTable maintable = (MainTable) session.get(MainTable.class, id);
maintable.getLookups().clear;
maintable.setLookups(lookups));
session.merge(maintable);
Любая помощь приветствуется. Заранее спасибо
Является ли сеттер 'MainTable.setLookups()' повторно используемым ранее очищенным набором? Или он назначает параметр полю? – Brian
Это не повторное использование ранее очищенной коллекции. Я назначаю для него новый объект коллекции. – Viswa
Попробуйте повторно использовать коллекцию. Afaik - объект коллекции, предоставляемый Hibernate при загрузке объекта, - это некоторый 'PersistentCollection', который контролируется в сеансе. Поэтому я предлагаю добавить к нему все элементы вместо того, чтобы «выбросить его». – Brian