次の問題が発生しました。シンプルな (開始したばかりの) 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)}" />