我有一个简单的父/子用例,这让我很难让它正常运行。问题是保存操作按预期工作,但更新似乎没有。
父类:
@Entity
public class Parent {
private Long id;
private Fils fils;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId( Long id ) {
this.id = id;
}
@OneToOne(cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="fils_fk")
public Fils getFils() {
return fils;
}
public void setFils( Fils fils ) {
this.fils = fils;
}
}
儿童班:
@Entity
public class Fils {
private Long id;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId( Long id ) {
this.id = id;
}
}
测试类:
@Test
public void testSave(){
Parent p = new Parent();
p.setFils( new Fils() );
dao.save( p );
Assert.assertNotNull( p.getFils().getId() );
dao.delete( p );
}
@Test
public void testUpdate(){
Parent p = new Parent();
dao.save( p );
Fils f = new Fils();
p.setFils( f );
dao.update( p );
Assert.assertNotNull( p.getFils().getId() );
}
首先保存持久 Fils 对象,然后保存 Pere 对象,一切都很好,但只更新 Pere 对象。
我在 ParentDao 中使用了这段代码来执行更新:
public Parent update(Parent p){
sessionFactory.getCurrentSession().update( p );
return (Parent)sessionFactory.getCurrentSession().load( Parent.class, p.getId() );
}