db.collection.find()在EclipseLink的本机查询中不起作用

时间:2014-07-16 04:03:57

标签: 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 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}

虽然

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

给我这个

[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 )

有谁知道这里发生了什么?

2 个答案:

答案 0 :(得分:1)

我在本机查询中使用find()方法时遇到了同样的错误但是我使用了一种解决方法,首先你必须使用本机查询和mongodb的聚合并将结果保存在临时集合中然后你可以使用一个简单的命名查询findAll。使用此技术,您可以在mongodb中执行所有任意查询,并将结果发送到java

中的会话Bean

答案 1 :(得分:0)

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