単純な親/子のユースケースがあり、正しく実行するのに苦労しています。問題は、保存操作が意図したとおりに機能するが、更新が機能しないように見えることです。
親クラス:
@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() );
}