为啥我在本地 TomEE 1.6 中收到 HsqlException?

Posted

技术标签:

【中文标题】为啥我在本地 TomEE 1.6 中收到 HsqlException?【英文标题】:Why am I getting an HsqlException in my local TomEE 1.6?为什么我在本地 TomEE 1.6 中收到 HsqlException? 【发布时间】:2013-12-06 19:38:29 【问题描述】:

org.hsqldb.HsqlException:用户缺少权限或找不到对象:ENRG

enrg 是一个表名。它在数据库中,我以 root 身份连接。因此,至少可以说此错误消息具有误导性。由于我的应用程序使用的是 Hibernate jar,我什至不明白为什么我会看到这个。根据我在 Web 上的发现,这可能是我在 Eclipse 中启动的本地 TomEE 1.6 的一些错误配置。不过,我还没有弄清楚如何去做。

只是为了证明这不是 sql 或权限问题: 此代码因上述异常而失败:

Query q=entityManager.createNativeQuery("insert into enrg values (null, 'ws', null, 'test', 'notes');");
q.executeUpdate();

我复制此插入并将其粘贴到 mysql 命令行客户端,它工作正常。两种情况下的登录凭据都是相同的(root/root)。

异常位于此 jar 中:c:\tomee16\lib\sqldb-2.3.0.jar

我正在使用 JPA 2.0 和 Hibernate 4。

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">

<persistence-unit name="default" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>my classess</class>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>


    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/dbname?useUnicode=yes&amp;characterEncoding=utf8;" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="root" />

        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.show_sql" value="true" />
    </properties>

    </persistence-unit>

</persistence>

更新

Query q=entityManager.createNativeQuery("show tables;"); 导致java.sql.SQLSyntaxErrorException: unexpected token: SHOW。我的应用程序不知道它正在与 MySQL 数据库通信。

另外,在启动时,这里有几个警告: 警告:jar 'C:\javawork\webadmin.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\WebAdmin\WEB-INF\lib\hibernate-jpa-2.0-api-1.0.1.Final .jar' 包含有问题的类:javax.persistence.Entity。它将被忽略。 警告:jar 'C:\javawork\webadmin.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\WebAdmin\WEB-INF\lib\jboss-transaction-api_1.1_spec-1.0.1.Final .jar' 包含有问题的类:javax.transaction.Transaction。它将被忽略。 2013 年 12 月 7 日上午 1:22:37 org.apache.openejb.config.ConfigurationFactory configureApplication

【问题讨论】:

【参考方案1】:

原来应用程序从未连接到数据库。添加到 tomee.xml 并更改服务器位置的数据源使建立连接成为可能。

更多:How to verify entity manager can establish a connection to the database?

【讨论】:

以上是关于为啥我在本地 TomEE 1.6 中收到 HsqlException?的主要内容,如果未能解决你的问题,请参考以下文章

JPA 正在连接到一个不存在的 HSQL 数据库?

为啥我在本地环境(而在原始服务器上没有)上的 Wordpress 博客文章(仅)上收到错误消息

为啥我的 Glassfish3.1.2.2/MyFaces2.1.9/JSF 管理的性能优于 TomEE1.5+/CDI 管理的性能?

为啥 Hibernate 将模式名称添加到 Hsql 函数?

TomEE 中的 Spring Durable JMS 订阅者(不允许在使用的连接上设置 clientID)

为啥创建了芹菜任务但未收到