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
Java EclipseLink:BatchFetch(BatchFetchType.IN)深度关系使用find或JPQL失败_Java_Jpa_Eclipselink - Fatal编程技术网

Java EclipseLink:BatchFetch(BatchFetchType.IN)深度关系使用find或JPQL失败

Java EclipseLink:BatchFetch(BatchFetchType.IN)深度关系使用find或JPQL失败,java,jpa,eclipselink,Java,Jpa,Eclipselink,我正在使用与GlassFish(v3.1.2.2)捆绑的EclipseLink(v2.3.2),使用@BatchFetch(使用BatchFetchType.IN)时遇到了一些问题 我有3个实体A、B、C: @实体 公共A类{ @身份证 私人援助; @BatchFetch(值=BatchFetchType.IN) @OneToMany(mappedBy=“a”,fetch=FetchType.LAZY) 私人收藏; 公共字符串getAId(){ 返回援助; } 公共无效设置辅助(字符串辅助){

我正在使用与GlassFish(v3.1.2.2)捆绑的EclipseLink(v2.3.2),使用
@BatchFetch
(使用
BatchFetchType.IN
)时遇到了一些问题

我有3个实体A、B、C:

@实体
公共A类{
@身份证
私人援助;
@BatchFetch(值=BatchFetchType.IN)
@OneToMany(mappedBy=“a”,fetch=FetchType.LAZY)
私人收藏;
公共字符串getAId(){
返回援助;
}
公共无效设置辅助(字符串辅助){
这个。援助=援助;
}
公共集合getBs(){
返回bs;
}
公共空间收进(收集bs){
这个.bs=bs;
}
}
@实体
公共B级{
@身份证
私人串投标;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“aId”)
私人A;
@BatchFetch(值=BatchFetchType.IN)
@manytone(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST})
@JoinColumn(name=“CID”)
私人C C;
公共字符串getBId(){
退还投标书;
}
公共无效设置ID(字符串投标){
this.bId=投标;
}
公共根getA(){
返回a;
}
公共无效setA(A){
这个a=a;
}
公共C getC(){
返回c;
}
国家经济贸易委员会(C){
这个.c=c;
}
}
@实体
公共C类{
@身份证
私有字符串cId;
@OneToMany(mappedBy=“c”,fetch=FetchType.LAZY)
私有集合父项=新ArrayList();
公共字符串getCId(){
返回cId;
}
公共无效设置cId(字符串cId){
this.cId=cId;
}
公共集合getParents(){
返回父母;
}
公共集合父对象(集合父对象){
这个。父母=父母;
}
}
现在我想查询一个和惰性负载(使用批处理选择)及其Bs和Cs

CriteriaBuilder=em.getCriteriaBuilder();
CriteriaQuery=builder.createQuery(A.class);
Root=query.from(A.class);
query.where(用于搜索的一些条件);
List result=em.createQuery(query.getResultList();
(A:结果){
for(B:a.getBs()){
C=b.getC();
//用c做点什么
}
}
这就像一种魅力,但如果我试着做到以下几点:

aa=em.find(A.class,“SOME A ID”);
for(B:a.getBs()){

C C=b.getC();//我还没有看到这个问题,但是您可能想尝试最新的EclipseLink版本(我相信是2.5.1)验证它是否已修复。如果未修复,请检查EclipseLink bug数据库,如果它不存在,请提交一个。我已在EclipseLink 2.5.1中尝试过,它可以工作!似乎是我们正在使用的版本中的一个bug…不幸的是,我们无法切换到新版本,因此我将坚持使用
BatchFetchType.EXISTS
。感谢帮助:)
org.eclipse.persistence.exceptions.QueryException
Exception Description: The parameter name [query-batch-parameter] in the query's selection criteria does not match any parameter name defined in the query.
Query: ReadAllQuery(name="c" referenceClass=C sql="SELECT DISTINCT CID FROM C WHERE (CID IN ?))