この質問は私が公式化するのは非常に難しいです。明確化が必要な場合はお気軽にお問い合わせください。組込みクラスと双方向関係
状況:私はHibernateを使用してデータベース内の異なるエンティティクラスを保持するSpringアプリケーションを持っています。これらのクラスを呼び出す簡略化のためにE1, E2, .., E20
。これらのクラスはすべて同じ抽象@MappedSuperclass
に基づいていますが、実際の継承はありません(データベース側)。
今、私は新しいエンティティクラス(En1, En2, ...
)を追加し、いくつかの既存のエンティティとの双方向関係を確立したいと思います。 En1
はE1,E2,E3
とrealtionであると仮定すると、私のコードは次のようになります。
@Entity
public class E1 extends SuperClass {
//other attributes
@OneToMany(mappedBy = "e1")
List<En1> newAttribut;
public En1 doMagic(En1 entity) {
//a long function which does somthing with the entity
}
//other attribute
}
//-----------------------------//
// The same code for E2 and E3 //
//-----------------------------//
@Entity
public class En1 {
//other attributes
@ManyToOne
E1 e1;
@ManyToOne
E2 e2;
@ManyToOne
E3 e3;
//other attributes
}
問題:このソリューションは十分ではないスケール。私は各関係のクラスEn1
に属性を必要とし、それぞれの既存のエンティティにdoMagic()
メソッドをコピーする必要があります。さらに、実際には、エンティティEn1
は、一度に1つの他のエンティティとの関係でのみ使用されます。したがって、3つの属性のうち2つはnull
です。
しようとしたソリューション:@Embeddable
の使用はE1,..,E3
public class EmbeddedEn1 implements Serializable {
@OneToMany(mappedBy="parentEntity")
private List<En1> newAttribut;
public En1 doMagic(En1 entity) {
//a long function which does somthing with the new entity
}
}
で同じコードを再実装の問題を解決しかし"parentEntity"
バイdiretionを確立することはできません。
継承が動作していない:もちろんを、私はE1,E2,E3
から継承hasAttributEn1
のようなクラスを使用することができますが、これは他の新しいエンティティクラスを拡張できません。 En2,..,En4
は、次のエンティティとの関係であるべきで、新しいエンティティ以下の状況、と仮定すると、このような状況で
En2 <-> E1, E3
En3 <-> E2,E3
En4 <-> E1,E2
を、多重継承が必要とされるであろう。
コードを複製せずにこの問題を解決するにはどうすればよいですか?
私はプロジェクトで汎用DAOを使用しています。しかし、この疑問は、モデル構造、すなわちエンティティの設計であり、私がそれらにアクセスできる方法ではない。 – Thanthla