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