0

次の問題が発生しました。シンプルな (開始したばかりの) Web アプリケーションがあります。新しい Web アプリケーション プロジェクトを作成し、データベースから @ManyToOne (実際にはエンティティが存在するため) クラスを使用してエンティティを生成しました。実行しようとするとこうなります。

ファーストラン:

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group WHERE (group_id = 1)' at line 1 Error Code: 1064 Call: SELECT group_id, acc_level, name FROM group WHERE (group_id = ?) bind => [1 parameter bound] Query: ReadObjectQuery(name="file:/D:/Projekty/Sell Your Thing/build/web/WEB-INF/classes/_Sell_Your_ThingPU" referenceClass=Group1 )

2 回目の実行: すべてが正しいです。

com.model.User cannot be cast to com.model.User

ページを数回更新した後、次のようになります。

WEB9031: WebappClassLoader unable to load resource [sun.reflect.ConstructorAccessorImpl], because it has not yet been started, or was already stopped

私は今とても混乱しています:/ (私はグラスフィッシュとmysqlを使用しています)

編集: キーワードであるため、名前を group から user_group に変更して、最初のエラーを解決しました。追加して最後のエラーも解決しました

        <property name="openjpa.DynamicEnhancementAgent" value="false"/>
    <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />

persistance.xml で

私はまだキャストを解決できません。本当に単純なコードを持っているのに、なぜクラスリークが発生するのか、それが何であるかがわかりません。(netbeans で生成されたエンティティ) エラーの原因となるメソッド:

    public String getUserNameById(int id) {
    em = getEntityManager();
    Query q = em.createNamedQuery("User.findByUserId");
    q.setParameter("userId", id);
    User u = (User) q.getSingleResult();
    em.close();
    return u.getName();
} 

そして私はJSFでそれを使用します

<h:outputText value="#{userBean.getUserNameById(2)}" />
4

1 に答える 1

1

group最初のエラーは、テーブルの名前として選択したことが原因である可能性があります。group予約済みの SQL キーワードであるため、クエリは無効です。select別の名前を選択してください (名前として,orderまたはを選択しないでくださいinsert:-))

于 2013-05-29T21:04:30.890 に答える