1

我有一个简单的父/子用例,这让我很难让它正常运行。问题是保存操作按预期工作,但更新似乎没有。

父类:

@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() );
}
4

1 回答 1

0

OP的解决方案。

问题解决了。

在 ParentDao 中替换代码片段以执行更新:

public Parent update(Parent p){
    sessionFactory.getCurrentSession().persist( p );
    return (Parent)sessionFactory.getCurrentSession().load( Parent.class, p.getId() );
}

并且 tadam 更新工作级联子实体持久性。

我从来没有读过你不能使用更新并在这个操作上得到级联。

于 2019-12-07T14:46:57.947 回答