@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name="Something", joinColumns=@JoinColumn(name="profile_id"))
@Column(name="favorite")
private Set<String> something = new HashSet<String>();
我在我的个人资料中有这种关系并且它有效。创建一个表。删除配置文件时,我不会从Collection表中删除属于该实体的行。我不想使用级联。我怎样才能做到这一点。
答案 0 :(得分:2)
开箱即用。当通过EntityManager.remove删除具有ElementCollection的实体时,不需要进一步的操作 - 持久性提供程序也会从集合表中删除。
答案 1 :(得分: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();
}
...
}