2011-01-09 7 views
1

私は3つのエンティティクラス(A,B,C)を持っています。 には、のインスタンスBCのインスタンスにマップするマップが含まれている必要があります。 Cのすべてのインスタンスは、Aのマップによって所有されています。私はこの(省略getterとsetter)を試してみた:JPA2でマップ<EntityA、EntityB>を維持する方法は?

素敵なスキーマ(私が望む正確に一つを!)与えるが、Javaで 2つのの方法には、今があることを考えると醜い重複があります
@Entity public class A { 
    @Id @GeneratedValue private Long id; 

    // I want to map this in an elegant way: 
    @OneToMany(mappedBy="a") @MapKey(name="b") private Map<B, C> map; 
} 

@Entity public class B { 
    @Id @GeneratedValue private Long id; 
} 

@Entity public class C { 
    @Id @GeneratedValue private Long id; 

    // I don't really want the following in Java, unidirectional access from A to C would suffice: 
    @ManyToOne private A a; 
    @ManyToOne private B b; 
    // Can I get rid of a and b? 
} 

関係を指定します。

a.map.put(b, c); 

と私は協会の半分を変更した場合

c.a = a; 
c.b = b; 

はどうなりますか?それは問題に見えます。その周りの最善の方法は何ですか?必要な単方向アクセスのためのより洗練されたソリューションはありませんか?

私はC @Embeddableを作ると考えるとA.mapため@ElementCollectionを使用しますが、現実にはCはそれが@Embeddable行うことができないことを意味し、異なるエンティティの抽象基本クラスです。

答えて

0

どのような種類のスキーマが必要かわかりませんが、@MapKeyJoinColumnを使用すると、この関係を一方向にすることができます(javadocの例1を参照)。

関連する問題