2

テーブルの構造は次のとおりです。

desc customer_survey
Name        Null     Type         
----------- -------- ------------ 
SURVEYID    NOT NULL VARCHAR2(10) 
CUSTNO      NOT NULL VARCHAR2(10) 
SRNO                 NUMBER(10)   
AVGRATINGS           NUMBER(5,2)  
COMMENTS             VARCHAR2(50) 
SENTON               DATE         
RESPONDEDON          DATE         

desc Survey_response
Name             Null     Type         
---------------- -------- ------------ 
SURVEYRESPONSEID NOT NULL NUMBER(10)   
RATINGS          NOT NULL NUMBER(2)    
QNO              NOT NULL VARCHAR2(10) 
SURVEYID         NOT NULL VARCHAR2(10) 

Javaクラス:

 public class CustomerSurvey implements Serializable {

@OneToMany(fetch=FetchType.EAGER, mappedBy="customerSurvey", 
     cascade=CascadeType.ALL)
private Set<SurveyResponse> responses;
 ......

 public class SurveyResponse {

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="SURVEYID", referencedColumnName="surveyId")
private CustomerSurvey customerSurvey;

 ......

クライアントコード:

 List<CustomerSurvey> surveys = workService.getSurveysByCustomer("testCNo2");
 System.out.println("surveys size = " + surveys.size());

 for(CustomerSurvey survey: surveys) {
System.out.println("getting responses from the survey object now..");
Set<SurveyResponse> responses = survey.getResponses();
System.out.println("responses size= .." + responses.size());
 }

コンソールの表示:

調査サイズ=1現在調査オブジェクトから回答を取得しています。回答サイズ=..0

一方、選択した調査のDBには7つの回答があります。

4

3 に答える 3

3

ロギングを有効にして、SQLが正しいかどうかを確認します。

不完全なコードから判断するのは難しいですが、一般にOneToManyはJoinColumnを使用せず、mappedByを使用する必要があり、ManyToOneの結合列はオブジェクトのIDを参照する必要があります。

また、オブジェクトを挿入するときに、関係の両側を設定していることを確認してください。

于 2012-10-15T13:51:30.933 に答える
0

このリンクは役に立ちました。コレクションを怠惰に戻しました。そして
、永続クラス内で、結果セットを取得した後のトランザクション内で、getResponsesを次のように呼び出しています。

List<CustomerSurvey> surveys = query.getResultList();
for (CustomerSurvey survey : surveys) {
    Set<SurveyResponse> responses = survey.getResponses();
}

応答を入力します。

于 2012-10-24T18:49:22.000 に答える
0

もう1つのオプションは、関係にjpqlフェッチクエリを設定することです。

「調査調査から調査を選択してフェッチ調査に参加します。

私は同じ問題を抱えていましたが、それでも何が悪いのかを見つけることができません。私の場合、親エンティティはjpqlクエリによって読み込まれたため、これを拡張すると回避策が提供されました。

于 2013-06-07T15:07:26.093 に答える