在Netbeans中的JPA,奇怪的是

时间:2013-05-29 18:59:36

标签: java jpa netbeans

我遇到了以下问题。 我有简单(刚刚开始)的Web应用程序。 我创建了新的Web应用程序项目,并使用@ManyToOne生成实体(因此实际上还有实际的enitities)来自数据库。当我尝试运行它时会发生这种情况。

首先运行:

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 )

第二轮:一切都是正确的 在使Netbeans重新编译之后(例如我在某处添加空格)我得到了这个:

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

我现在很困惑:/ (我使用glassfish和mysql)

编辑: 我通过将名称从group更改为user_group解决了firt错误,因为它是一个关键字。 我还通过添加

解决了最后一个错误
        <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)}" />

1 个答案:

答案 0 :(得分:1)

第一个错误可能是因为您选择group作为表名。 group是保留的SQL关键字,查询无效。选择其他名称(不要选择selectorderinsert作为名称: - )