2012-01-07 6 views
2

私は典型的な問題に直面しています。オブジェクト間の典型的な1-Nの関係を想像してください。正確なユーザー(U)とルーム(R):[U] * --- 1 [R]。JPA MappedSuperclass with ManyToOne

ここで問題が発生します。Roomは、BlueRoom、RedRoomなどの実装を含む抽象基本クラスである必要があります。ユーザーエンティティ内での関係の設定方法

public interface Room { ... } 
@MappedSuperclass 
public abstract class RoomSuperclass implements Room { ... } 
@Entity 
public class BlueRoom extends RoomSuperclass { ... } 
@Entity 
public class RedRoom extends RoomSuperclass { ... } 


@Entity 
public class User { 

    @ManyToOne(targetEntity = ???) // I don't know if it will be BlueRoom or RedRoom 
    private Room room; // ManyToOne cannot be applied on mapped superclass 
} 

私はこれはおそらく代わりに@MappedSuperclassのRoomSuperclassに@Entityを使用することによって解決できる知っているが、私はそれが良い解決策であり、任意のより良い1があるかどうかはわかりません。

+1

はい、解決策です。あなたが何かに関連しているなら、この何かは実体でなければなりません。 –

+0

返信ありがとうJB、私は誰か他の人が返信して質問を閉じると2日待っています – d1x

答えて

1

投稿の下の解説によると、 @Entityとしてスーパークラスを宣言することが解決策です。

+0

@MappedSuperclassの目的を説明できますか? – salocinx

+1

私はまったく同じくそっと思っています。私は抽象的なエンティティをテーブルにマッピングしたくないので、このアノテーションを使用しようとしている半日の間、壁に向かって頭を叩いています!!それは抽象です!しかし、いいえ、継承を使用する場合は、マッピングされたエンティティを指定する必要があります。このアノテーションは何のために作られましたか? – Alex

関連する問題