У меня проблема с Hibernate.
Короче говоря:
Как настроить связь ManyToMany с Hibernate, когда связь имеет атрибут, и нам нужно сохранить, удалить и обновитьв каскаде?
В целом:
Представьте себе следующую базу данных:
Super Mini
M______N
|
attribute
Здесь есть 3 таблицы:
"Mini", "Super" and "Super_Mini".
Теперь представьте, что Super_Mini имеет 1 атрибут для отношения (и, очевидно, ключи).
Хорошо, теперь это переводится в Hibernate следующим образом:
Super:
// The relation is Many to Many, but considering that it has an attribute, this is OneToMany with the ManyMany RelationShip
@OneToMany(mappedBy="mini", targetEntity=Mini.class)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
@LazyCollection(LazyCollectionOption.TRUE)
private Set<SuperMini> superMini = new HashSet<SuperMini>();
SuperMini:
@Id
@ManyToOne(targetEntity=Super.class,fetch=FetchType.LAZY)
@Cascade({CascadeType.LOCK})
@JoinColumns({ @JoinColumn(name="...", referencedColumnName="...") })
private Super super;
@Id
@ManyToOne(targetEntity=Mini.class,fetch=FetchType.LAZY)
@Cascade({CascadeType.LOCK})
@JoinColumns({ @JoinColumn(name="...", referencedColumnName="...") })
private Mini mini;
Итак, я думаю, что конфигурацияисправить и сохранить независимо, если у объекта есть мини-дети, сохраните их все.Проблема в том, что я пытаюсь удалить объект:
Super data = getHibernateTemplate().load(Super.class, idSuper);
getHibernateTemplate().getSessionFactory().getCurrentSession().clear();
data.setMini( new HashSet<Mini>() );
getHibernateTemplate().delete( data );
getHibernateTemplate().getSessionFactory().getCurrentSession().flush();
Hibernate не удаляет отношение Mini ... В чем проблема?Я знаю, как решить эту проблему с помощью HQL, но, возможно, конфигурация неверна, я не знаю.
Заранее спасибо,