sma*_*ufo 10 orm hibernate jpa one-to-one
我有两个实体,具有以下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;
}
Run Code Online (Sandbox Code Playgroud)
所有者和数据具有一对一的映射,拥有者是所有者.执行时发生问题:owner.setData(null); ownerDao.update(所有者) ; "Owner"表的Data_id变为null,这是正确的.
但"数据"行不会自动删除.我必须编写另一个DataDao,并用另一个服务层来包装这两个动作(ownerDao.update(owner); dataDao.delete(data);)
当拥有的所有者将其设置为null时,是否可以自动删除数据行?
Thi*_*rry 14
根据您的休眠版本,使用:
在@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;
Run Code Online (Sandbox Code Playgroud)
要么
@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="Data_id")
private Data Data;
Run Code Online (Sandbox Code Playgroud)
编辑:我发现这个SO帖子:Hibernate缺乏对一对一和多对一关系的删除 - 孤儿支持的解决方法?
所以perhap是不行的.这两个答案描述了两种不同的解决方法.