2017-05-15 4 views
0

私は休止状態になっていますが、いくつかのテーブルと外部キーでも動作させることができましたが、Javaオブジェクトの階層を保存する必要があります。私はレスポンスは1つの要求Hibernate正しいカスケード・マッピング

応答に関連付けられている

月は0を生成し、この

リクエスト.. * 応答のような私の問題を単純化しますもあり2 ResponseDetailオブジェクト

ResponseDetailは手動でRequestオブジェクトを設定し、私はResponseDetailをこの応答を保存し、自動的に聞かせて休止状態保存する必要があります、私はいくつかの回答を得るでしょう1つのレスポンス

Class Request{ 
@Id 
int reqId; 
} 

Class Response 
{ 
@Id 
int respId; 

@OneToOne(fetch=FetchType.LAZY) 
@JoinColumn(name = "reqId") 
Request req; //foreign key from request 
ResponseDetail rd1; 
ResponseDetail rd2; 
} 


Class ResponseDetail{ 
??? 
int rdId; 
other stuff... 
} 

今のjava側に関連付けられていますrd1 & rd2、正直なところ、どのように処理するのか分かりません。

理想的には、私はいくつかの応答に休止状態の保存方法を使用する方法が必要になり、それが自動的にDBにResponseDetailを保存し、RD1での参照を設定して、私が使用する必要がありますどのようなマッピングRD2フィールド

ます?私の目標に正しく到達するには?

答えて

1
@Entity 
class Request 
{ 
    @OneToMany(mapped-by="request", cascade=CascadeType.ALL) 
    public List<Response> getResponses() 
    // implementation  

} 

@Entity 
class Response 
{ 
    @OneToOne 
    @JoinColumn(name="request_id") 
    public Request getRequest() 
    // implementation 
} 

保存する前に、すべての子オブジェクトに対してParentオブジェクト(この例ではRequest)を設定する必要があります。

for(Resposne res:request.getResponses(){ 
    res.setRequest(request); 
} 
yourService.save(request); 
+0

私が行っていなくても、欠けていたアノテーションJoinColumnが助けになりました。私は同様のことを試みましたが、成功しなかったので、jsonでRequestをシリアル化してループを生成する必要もあるためです。だから私はレスポンスでリクエストフィールドを削除してIDを強制しようとしましたが、依頼を保存しても、レスポンスフィールド(Request内)に一意の識別子制約違反があります。 –

関連する問題