【问题标题】:Missing descriptor exception while using Eclipselink Expressionbuilder使用 Eclipselink Expressionbuilder 时缺少描述符异常
【发布时间】:2012-03-19 13:59:29
【问题描述】:

我有一个实体 Person,其中包含 String nameString designation 字段。当我尝试使用 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)

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

【问题讨论】:

    标签: jpa-2.0 eclipselink


    【解决方案1】:

    我终于明白了。必须使用 org.eclipse.persistence.sessions.server.ClientSession 而不是 DatabaseSession。

        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。

    这解决了问题。

    【讨论】:

      【解决方案2】:

      您没有为 Person 添加描述符。您需要对其进行映射才能对其进行查询。

      还可以考虑使用 JPA。

      【讨论】:

      • 谢谢..我在某个地方看到了这个。但我对如何做到这一点感到困惑。
      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 2019-03-22
      • 1970-01-01
      相关资源
      最近更新 更多