2

私はこれらの2つのクラスを持っています:

@Entity
public abstract class Compound {


    @OneToMany(fetch = FetchType.EAGER, mappedBy="compound",
        targetEntity=Containable.class, cascade = CascadeType.ALL)      
    private Set<Containable> containables = new HashSet<>();
}

@Entity 
public abstract class Containable {     

    @ManyToOne(optional=true, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Compound compound;
}

タイプセーフな方法で達成したいのは、Compoundの特定の実装は、Containableの特定の実装のみを受け入れ、その逆も同様です。

どうすればこれを達成できますか?

編集:

私はすでにasenovmからの解決策を持っていましたが、それが実際に正しいものであることを再確認したかっただけです。

私のフォローアップの質問は、class Compound<T extends Containable>Containableclass Containable<T extends Compound>とCompoundがrawタイプであるか、それとも間違っているかということです。class Compound<T extends Containable>Tは実際には包含可能であり、他には何もないからです。

4

1 に答える 1

2

おそらくこのようなものですか?

@Entity
public abstract class Compound<T extends Containable> {


    @OneToMany(fetch = FetchType.EAGER, mappedBy="compound",
        targetEntity=Containable.class, cascade = CascadeType.ALL)      
    private Set<T> containables = new HashSet<T>();

}

@Entity 
public abstract class Containable<T extends Compound> {     

    @ManyToOne(optional=true, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private T compound;
}
于 2013-02-08T12:00:30.447 に答える