1
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name="Something", joinColumns=@JoinColumn(name="profile_id"))
@Column(name="favorite")
private Set<String> something = new HashSet<String>();

我的个人资料中有这种关系并且它有效。一个表被创建。删除配置文件后,我不会将属于该实体的行也从 Collection 表中删除。我不想使用级联。我怎样才能使这项工作。

4

2 回答 2

2

这是开箱即用的。当通过EntityManager.remove删除具有 ElementCollection 的实体时,不需要进一步的操作 - 持久性提供程序问题也会从集合表中删除。

于 2013-10-09T17:11:39.593 回答
0

您可以将删除行的代码放在 Profile 实体类中使用 @PostRemove 注释的方法中。

@Entity
public class Profile {

    @PostRemove
    public void cleanupCollectionTable(){
        Query query = em.createQuery("DELETE FROM Something s WHERE s.profile_id = :id");
        int deletedCount = query.setParameter(id, profileId).executeUpdate();
    }

    ...

}
于 2013-10-09T13:19:34.513 回答