2012-03-19 32 views
2

を使用している間、私はフィールド文字列名文字列の指定実体を持っています。私のように、ExpressionBuilderのの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の永続性サービス - 2.3.2。 v20111125-r10461):org.eclipse.persistence.exceptions.QueryException 例外の説明:[クラスcom.mycompany.entity.Person]の記述子がありません。 クエリ:ReadAllQuery(referenceClass = Person)

何が原因なのですか?ありがとうございます...

答えて

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のです。

これが問題を解決しました。

0

あなたはPersonの記述子を追加しませんでした。それを照会できるようにマップする必要があります。

JPAの使用も検討してください。

+0

ありがとうございました。私はこれをどこかで見ました。しかし、私はそれをどうやって行うのか混乱しています。 –