2017-08-09 5 views
0

私は休止状態AとBに2つのエンティティを持っています。 1次キーを使用して1対1の結合を休止する

@Entity 
public class A { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    private Integer id; 

    @OneToOne(mappedBy = "a", cascade = CascadeType.ALL) 
    private B b; 
} 

@Entity 
public class B { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    private Integer id; 

    @Column(name = "a_id") 
    @GeneratedValue(generator = "gen") 
    @GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name = "property", value = "a")) 
    private Integer aId; 

    @OneToOne(fetch = FetchType.LAZY, optional = false) 
    @PrimaryKeyJoinColumn 
    private A a; 
} 

は、私は、次のHQLクエリを実行するとき、は、参加

"from A a left join a.b" 

は、以下の条件

で撮影され、 one to one mapping using primary key join column

ただし、下記のリンクで述べたのと同じでした

a.id = b.id 

種牡馬は、クラス内のフィールドbにクラスBの

@OneToOne(fetch = FetchType.LAZY, optional = false) 
@PrimaryKeyJoinColumn 
private A a; 

とクラスBをフィールドする

@OneToOne(mappedBy="a", cascade=CascadeType.ALL) 
    private B b; 

をクラスAの参照を与えている以下の条件

a.id = b.aId 
+0

あなたは答えとして私の返事をマークしてくださいでしょう:あなたがそうする必要がある場合は、次のようにではないに挿入していない更新可能なそれらのいずれかを行う必要がありますか? –

答えて

0

ですしたがって、デフォルトでは、Hibernateは参照フィールドを持つ結合クエリを作成します。デフォルトで休止状態になると、a.id = b.idに参加します。 しかし、私はあなた自身のクエリを作成し、a.id = b.aIdとの結合を実行するためのネイティブクエリを使用することができると思います。

0

@PrimaryKeyJoinColumnの代わりに@JoinColumn(name = "a_id")を使用する必要があります。 ところで、同じ列に2つのフィールドを定義することはできません。

@JoinColumn(name = "a_id", insertable = false, updatable = false) 
+0

ありがとうMehdi ...それは働いた:) –

関連する問題