Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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-表达式中的查询键[latestVersionFlag]无效_Java_Eclipselink - Fatal编程技术网

Java EclipseLink-表达式中的查询键[latestVersionFlag]无效

Java EclipseLink-表达式中的查询键[latestVersionFlag]无效,java,eclipselink,Java,Eclipselink,我刚从Toplink升级到EclipseLink,遇到了这个错误 异常[EclipseLink-6015](Eclipse持久性服务-2.6.1.v20150916-55dc7c3):org.Eclipse.Persistence.exceptions.QueryException异常描述:表达式中的查询键[latestVersionFlag]无效。查询:ReadAllQuery(name=“bookingVersionCollection”referenceClass=BookingVersi

我刚从Toplink升级到EclipseLink,遇到了这个错误

异常[EclipseLink-6015](Eclipse持久性服务-2.6.1.v20150916-55dc7c3):org.Eclipse.Persistence.exceptions.QueryException异常描述:表达式中的查询键[latestVersionFlag]无效。查询:ReadAllQuery(name=“bookingVersionCollection”referenceClass=BookingVersion)

我的描述符看起来像这样

OneToManyMapping bookingVersionCollectionMapping = new OneToManyMapping();
bookingVersionCollectionMapping.setAttributeName("bookingVersionCollection");
bookingVersionCollectionMapping.setReferenceClass(BookingVersion.class);
bookingVersionCollectionMapping.useTransparentCollection();
bookingVersionCollectionMapping.useCollectionClass(IndirectList.class);
bookingVersionCollectionMapping.addAscendingOrdering("bookingVersionID");
bookingVersionCollectionMapping.addTargetForeignKeyFieldName("RS_BOOKINGVERSION.RS_BKG_ID", "RS_BOOKING.RS_BKG_ID");
bookingVersionCollectionMapping.setSelectionCriteria(bookingVersionCollectionMapping.buildSelectionCriteria()
    .and(expBuilder.get("latestVersionFlag").equal(ResConstants.FLAG_YES)));
descriptor.addMapping(bookingVersionCollectionMapping);
我还有一个BookingVersion类的映射,该类具有该字段的映射

DirectToFieldMapping latestVersionFlagMapping = new DirectToFieldMapping();
latestVersionFlagMapping.setAttributeName("latestVersionFlag");
latestVersionFlagMapping.setFieldName("RS_BOOKINGVERSION.LATESTVERSIONFLAG");
descriptor.addMapping(latestVersionFlagMapping);
在BookingVersion.Java的Java poco对象中,该字段如下所示

private char latestVersionFlag = ResConstants.FLAG_YES;
有什么想法吗?这段代码在Toplink中工作,因此不确定发生了什么。

好吧,通过更改

bookingVersionCollectionMapping.setSelectionCriteria(bookingVersionCollectionMapping.buildSelectionCriteria()
    .and(expBuilder.get("latestVersionFlag").equal(ResConstants.FLAG_YES)));


似乎有效。。。。。仍然不知道为什么,但我想我会为其他人发帖

何时添加bookingVersionCollectionMapping,从何处引发异常?我猜,但是bookingVersionCollectionMapping中的表达式集似乎是在其他所有操作完成之前处理的,并且latestVersionFlagMapping还没有查询键。您可能需要使用描述符定制器将selectionCriteria添加到bookingVersionCollectionMapping中,以便在处理完所有其他内容后添加selectionCriteria。您是否可以添加完整的stacktrace(如果仍然有)以便读者可以将其与其他问题和EclipseLink问题进行比较。这可能会在上讨论。谢谢!我们从2.5.2升级到了2.6.1 eclipselink,并且由于这个错误出现了间歇性故障。使用getField而不是get方法解决了这个问题。
bookingVersionCollectionMapping.setSelectionCriteria(bookingVersionCollectionMapping.buildSelectionCriteria()
      .and(expBuilder.getField("RS_BOOKINGVERSION.LATESTVERSIONFLAG").equal(ResConstants.FLAG_YES)));