我有一个实体人,字段字符串名称和字符串名称。当我尝试使用Eclipselink ExpressionBuilder 进行查询时,如下:
Project project=new Project();
Login login=new DatabaseLogin();
login.setUserName("root");
login.setPassword("root");
project.setLogin(login);
DatabaseSession session=project.createDatabaseSession();
ExpressionBuilder expBuilder=new ExpressionBuilder();
Expression expression=expBuilder.get("name").equalsIgnoreCase("SomeName");
Vector readAllObjects = session.readAllObjects(Person.class, expression);
在执行最后一个语句时,抛出以下异常:
异常[EclipseLink-6007](Eclipse Persistence Services - 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.QueryException 异常描述:缺少[class com.mycompany.entity.Person]的描述符。 查询:ReadAllQuery(referenceClass = Person)
可能是什么原因?提前谢谢......
答案 0 :(得分:1)
最后我明白了。而不是DatabaseSession,必须使用org.eclipse.persistence.sessions.server.ClientSession。
JpaEntityManager jpaEntityManager=em.unwrap(JpaEntityManager.class);
ClientSession session=jpaEntityManager.getServerSession().acquireClientSession();
ExpressionBuilder expBuilder=new ExpressionBuilder();
Expression expression=expBuilder.get("name").equalsIgnoreCase("SomeName");
Vector readAllObjects = session.readAllObjects(Person.class, expression);
em 是EntityManager。
这解决了这个问题。
答案 1 :(得分:0)
您没有为Person添加描述符。您需要映射它以便能够查询它。
另请考虑使用JPA。