У меня проблема с Hibernate (благодаря Thomas теперь проблема стала более разборчивой).
Короче говоря:
Как настроить ассоциацию ManyToMany с Hibernate, когда отношения имеют атрибут, и нам нужно сохранять, удалять и обновлять каскадно?
В целом:
Представьте себе следующую базу данных:
User Profile
M______N
|
attribute
Здесь 3 таблицы:
"User", "Profile" and "User_Profile".
Теперь представьте, что User_Profile имеет 1 атрибут для отношения (и, очевидно, ключи).
Хорошо, теперь это переводится в Hibernate следующим образом:
User:
// The relation is Many to Many, but considering that it has an attribute, this is OneToMany with the ManyMany RelationShip
@OneToMany(mappedBy="user", targetEntity=UserProfile.class)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
@LazyCollection(LazyCollectionOption.TRUE)
private Set<UserProfile> userProfile = new HashSet<UserProfile>();
UserProfile:
@Id
@ManyToOne(targetEntity=User.class,fetch=FetchType.LAZY)
@Cascade({CascadeType.LOCK})
@JoinColumns({ @JoinColumn(name="...", referencedColumnName="...") })
private User user;
@Id
@ManyToOne(targetEntity=Profile.class,fetch=FetchType.LAZY)
@Cascade({CascadeType.LOCK})
@JoinColumns({ @JoinColumn(name="...", referencedColumnName="...") })
private Profile profile;
Итак, я думаю, что конфигурация правильная, и сохранить, независимо от того, есть ли у пользователя профиль детей, сохранить их все. Проблема в том, когда я пытаюсь обновить пользователя:
getHibernateTemplate().getSessionFactory().getCurrentSession().clear();
getHibernateTemplate().saveOrUpdate( user );
getHibernateTemplate().getSessionFactory().getCurrentSession().flush();
Hibernate не удаляет отношение профиля, если есть пустой набор дочерних профилей. Только добавьте профили (переопределите старые) ... Это редко ... В чем проблема?
Заранее спасибо