使用Eclipselink Expressionbuilder时缺少描述符异常

时间:2012-03-19 13:59:30

标签: jpa-2.0 eclipselink

我有一个实体,字段字符串名称字符串名称。当我尝试使用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)

可能是什么原因?提前谢谢......

2 个答案:

答案 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。