我有两个实体,其中包含以下JPA注释:
@Entity
@Table(name = "Owner")
public class Owner implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private long id;
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
private Data Data;
}
@Entity
@Table(name = "Data")
public class Data implements Serializable
{
@Id
private long id;
}
所有者和数据具有一对一的映射,拥有者是所有者。 执行时会出现问题: owner.setData(null); ownerDao.update(所有者); “Owner”表的Data_id变为null,这是正确的。
但“数据”行不会自动删除。 我必须编写另一个DataDao和另一个服务层来包装这两个动作(ownerDao.update(owner); dataDao.delete(data);)
当拥有的所有者将数据行设置为空时,是否可以自动删除数据行?
答案 0 :(得分:12)
根据您的休眠版本,使用:
在@OneToOne注释中使用cascadeType:DELETE_ORPHAN或orphanRemoval = true
文档:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive
我从来没有在OneToOne上尝试过,但是从文档来看,它应该可行。
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Data Data;
或
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="Data_id")
private Data Data;
编辑: 我找到了这个帖子:Workarounds for Hibernate's lack of delete-orphan support for one-to-one and many-to-one relationships?
所以perhap是不行的。这两个答案描述了两种不同的解决方法。