【发布时间】:2011-12-20 13:12:09
【问题描述】:
我遇到了 Hibernate 问题(感谢 Thomas,现在问题更清晰了)。
简而言之:
当关系有属性并且需要级联保存、删除和更新时,如何配置与Hibernate的ManyToMany关联?
大尺寸:
想象以下数据库:
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;
所以,我认为配置是正确的,并且如果用户有 Profile 子项,则可以独立保存所有这些。问题是当我尝试更新用户时:
getHibernateTemplate().getSessionFactory().getCurrentSession().clear();
getHibernateTemplate().saveOrUpdate( user );
getHibernateTemplate().getSessionFactory().getCurrentSession().flush();
如果有一组空的 Profile 子项,Hibernate 不会删除 Profile 关系。只添加配置文件(覆盖旧的)......这很少见......有什么问题?
提前谢谢你
【问题讨论】:
标签: java hibernate annotations cascade