Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA@OneToMany不接孩子_Jpa_One To Many_Eager Loading_Many To One - Fatal编程技术网

JPA@OneToMany不接孩子

JPA@OneToMany不接孩子,jpa,one-to-many,eager-loading,many-to-one,Jpa,One To Many,Eager Loading,Many To One,以下是表格结构: desc customer_survey Name Null Type ----------- -------- ------------ SURVEYID NOT NULL VARCHAR2(10) CUSTNO NOT NULL VARCHAR2(10) SRNO NUMBER(10) AVGRATINGS NUMBER(5,2) COMMENTS

以下是表格结构:

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;

 ......
公共类CustomerSurvey实现可序列化{
@OneToMany(fetch=FetchType.EAGER,mappedBy=“customerSurvey”,
级联=级联类型(全部)
私有集响应;
......
公共类调查响应{
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“SURVEYID”,referencedColumnName=“SURVEYID”)
私人客户调查客户调查;
......
客户端代码:

 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());
 }
List surveys=workService.getSurveysByCustomer(“testCNo2”);
System.out.println(“surveys size=“+surveys.size());
用于(客户调查:调查){
System.out.println(“立即从调查对象获取响应…”);
设置响应=survey.getResponses();
System.out.println(“响应大小=…”+响应大小();
}
控制台显示:

调查规模=1 正在从测量对象获取响应。。 响应大小=…0


而对于所选调查,数据库中有7个响应。

启用日志记录并查看SQL是否正确

很难从不完整的代码中分辨出来,但一般来说,OneToMany不应该使用JoinColumn,它应该使用mappedBy,而ManyTone中的join列应该引用对象的Id

另外,请确保在插入对象时设置了关系的两侧。

帮助。 我将集合设置为lazy。并且
在持久性类中,在获取resultset后的事务中,我现在调用getResponses作为:

List<CustomerSurvey> surveys = query.getResultList();
for (CustomerSurvey survey : surveys) {
    Set<SurveyResponse> responses = survey.getResponses();
}
List surveys=query.getResultList();
用于(客户调查:调查){
设置响应=survey.getResponses();
}

另一个选项是使用jpql fetch查询填充关系:

“从调查中选择调查调查加入获取调查。响应”


我也遇到了同样的问题,但仍然无法找出问题所在。在我的例子中,父实体是由jpql查询加载的,因此扩展它提供了一个解决方法

我根据您的评论更改了代码。日志文件中的查询显示:选择'com.ge.dsp.iwork.entity.CustomerSurvey'作为NUCLEUS\u类型,SURVEY.AVGRATINGS,SURVEY.COMMENTS,B0.CITY,B0。公司名称,B0.CUSTNO,B0.EMAIL,B0.FIRSTNAME,B0.GENDER,B0.LASTNAME,B0.MIDINIT,B0.PHONE,B0.“状态”,B0.STREETADDRESS,B0.TITLE,B0.ZIPCODE,SURVEY.respondeon,SURVEY.SENTON,C0.CUSTNO,C0.DATECREATED,C0.DATEUPDATED,C0.DESCRIPTION,C0.SRNO,C0.STATUS,SURVEY.SURVEYID FROM CUSTOMER\u SURVEY SURVEY内部加入客户B0 ON SURVEY.CUSTNO=B0.CUSTNO左外部加入服务\u SURVEY请求C0 ON SURVEY.SRNO=C0.SRNO=C0.SRNO,其中B0.CUSTNO=C0.SRNO=这对我有帮助。可能是页面在未来的评论中,我可以帮助我解决这个问题的另一个问题:重复数据和连接的一个大问题是重复数据可以被返回。例如,考虑连接获取一个员工的音素关系。如果每个雇员在其音素中有3个电话对象。llection,加入将需要返回n*3行。由于每个员工行有3个电话行,员工行将被复制3次。一种不存在重复数据的加入提取替代解决方案是使用批提取。