0

我遇到了以下问题。我有一个简单的(刚开始的)网络应用程序。我创建了新的 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 )

第二次运行:一切都正确在使 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 解决了第一个错误,因为它是一个关键字。我还通过添加解决了最后一个错误

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

在持久性.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,orderinsert作为名称:-))

于 2013-05-29T21:04:30.890 回答