Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 db.collection.find()在EclipseLink';s本机查询_Java_Mongodb_Eclipselink_Nosql - Fatal编程技术网

Java db.collection.find()在EclipseLink';s本机查询

Java db.collection.find()在EclipseLink';s本机查询,java,mongodb,eclipselink,nosql,Java,Mongodb,Eclipselink,Nosql,我正在为我的项目使用EclipseLink NoSQL。我遇到的一件奇怪的事情是,当使用本机查询“db.collection.findOne()”时,一切工作正常,而“db.collection.find()”会引发异常 这段代码可以工作: Query emQuery = em.createNativeQuery("db.EMPLOYEE.findOne()", Employee.class); List employees = emQuery.getResultList(); 我有 [EL

我正在为我的项目使用EclipseLink NoSQL。我遇到的一件奇怪的事情是,当使用本机查询“db.collection.findOne()”时,一切工作正常,而“db.collection.find()”会引发异常

这段代码可以工作:

Query emQuery = em.createNativeQuery("db.EMPLOYEE.findOne()", Employee.class);
List employees = emQuery.getResultList();
我有

[EL Fine]: 2014-07-16 11:55:05.78--ServerSession(1394835)--Connection(17102354)--Thread(Thread[main,5,main])--Executing QueryStringInteraction()
    spec => null
    query => db.EMPLOYEE.findOne()
    parameters => []
[EL Finest]: 2014-07-16 11:55:05.806--ServerSession(1394835)--Thread(Thread[main,5,main])--Adapter result: {RFID=12435, VERSION=1, _id=53B632034390846204F1A165, EMPLOYEEID=Smith, BADGENO=2487, ADDUPDATEDDATE=Fri Jul 04 12:48:03 SGT 2014, ADDUPDATEDBY=Alex, TYPE=MANAGER}

把这个还给我

[EL Fine]: 2014-07-16 11:59:26.688--ServerSession(2940862)--Connection(24410159)--Thread(Thread[main,5,main])--Executing QueryStringInteraction()
    spec => null
    query => db.EMPLOYEE.find()
    parameters => []
[EL Finest]: 2014-07-16 11:59:26.731--ServerSession(2940862)--Thread(Thread[main,5,main])--Adapter result: {value=DBQuery: testfloor.EMPLOYEE -> undefined}
Exception Description: The primary key read from the row [EISMappedRecord(
    value => DBQuery: testfloor.EMPLOYEE -> undefined)] during the execution of the query was detected to be null.  Primary keys must not contain null.
Query: ReadAllQuery(referenceClass=Employee )

有人知道这里发生了什么吗?

集合中的一个项没有在
Employee
类中定义为主属性的属性值。
findOne()
之所以有效,是因为它返回找到的第一个项目,并且该项目可能具有主键的值。然而,在
find()
的情况下,集合中的所有项都将与没有主键值的项一起返回。EclipseLink尝试将记录转换为
Employee
的实例时,由于缺少主键而失败。

在本机查询中使用find()方法时,我也遇到了同样的错误,但我使用了一种解决方法,首先,您必须使用mongodb的本机查询和聚合,并将结果保存在临时集合中,然后您可以使用findAll的简单命名查询。使用这项技术,您可以在mongodb中执行所有任意查询,并将结果发送到java中的会话Bean,因此我做了以下两个测试用例:首先,我删除Employee集合中的所有记录,只添加一条新记录,并将所有值分配给相应的属性,并确保没有字段为空/null。findOne()工作时,find()仍然失败。第二个测试用例是我故意将一个字段留空/空。我得到了同样的结果。findOne()工作时,find()仍然失败。
[EL Fine]: 2014-07-16 11:59:26.688--ServerSession(2940862)--Connection(24410159)--Thread(Thread[main,5,main])--Executing QueryStringInteraction()
    spec => null
    query => db.EMPLOYEE.find()
    parameters => []
[EL Finest]: 2014-07-16 11:59:26.731--ServerSession(2940862)--Thread(Thread[main,5,main])--Adapter result: {value=DBQuery: testfloor.EMPLOYEE -> undefined}
Exception Description: The primary key read from the row [EISMappedRecord(
    value => DBQuery: testfloor.EMPLOYEE -> undefined)] during the execution of the query was detected to be null.  Primary keys must not contain null.
Query: ReadAllQuery(referenceClass=Employee )