1

これは、GroovyとJavaの組み合わせのようなものです。学習の一環としてコードを作成しました。

===================================================================

@Entity
public class GroovyBoy implements SimpleEntity {

@Id
@GeneratedValue
private long Id;
private String name;

@OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
private List<GroovyBro> brothers;

@Override
public Long getId() {
return Id;
}

@Override
public void setId(Long id) {
Id = id;
}
}

===================================================================

@Entity
class GroovyBro implements SimpleEntity {

    @Id
    @GeneratedValue
    private long Id;

    private String name;

    @ManyToOne(fetch=FetchType.EAGER)
    private GroovyBoy brother;

    @Override
    public Long getId() {
        return Id;
    }

    @Override
    public void setId(Long id) {
        Id = id
    }
}


===================================================================
        def dao = (MyDaoImpl) appContext.getBean("dao")

        def boy = new GroovyBoy()
        boy.name='boy1'

        def bro1 = new GroovyBro()
        bro1.name='bro1'

        def bro2 = new GroovyBro()
        bro2.name='bro2'

        boy.brothers = [bro1, bro2]

        dao.save(boy)

        //dao.evict(boy)

        println 'Id: ' + boy.brothers[0].id

        def loadBro = new GroovyBro();
        loadBro.id = boy.brothers[0].id

        GroovyBro bro = (GroovyBro) dao.get(loadBro)

        println 'Bro: ' + bro.brother

===================================================================

最後の行はnullを返しています。しかし、GroovyBoyエンティティをフェッチすると、永続バッグが読み込まれ、次にGroovyBroインスタンスが読み込まれます。GroovyBoyインスタンスがロードされないのはなぜですか?

前もって感謝します。

4

2 に答える 2

0

Not exactly sure what your code does, but ensure that you are setting both sides of the bi-directional relationship.

If when you created the object you only set one side, then the other side will still be null.

于 2012-06-21T13:42:41.040 に答える