【问题标题】:JPA persistence.xml I want it to connect to MariaDB but it always connects to hsqldbJPA persistence.xml 我希望它连接到 MariaDB,但它总是连接到 hsqldb
【发布时间】:2018-12-04 11:40:41
【问题描述】:

我有一个 java webapp,

persistence.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
         version="2.2">

<persistence-unit name="my-persistence-unit">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>

        <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/qltb"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="my_passwowrd"/>

        <property name="hibernate.archive.autodetection" value="class"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MariaDB103Dialect"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>

我创建了一个简单的 Bottle @Entity 类,它只包含一个 id 和一个 String 属性。

当我运行这个 web 应用程序时,我在日志中看到它正在处理 my-persistence-unit 但抛出了一个异常:

org.hibernate.jpa.internal.util.LogHelper.logPersistenceUnitInformation HHH000204: Processing PersistenceUnitInfo [
name: my-persistence-unit
...]

... // Some lines are skipped


org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
create table Bottle (
   id bigint not null,
    color varchar(255),
    primary key (id)
) engine=InnoDB" via JDBC Statement

.... // Some lines are skipped
Caused by: org.hsqldb.HsqlException: unexpected token: ENGINE : line: 6
at org.hsqldb.error.Error.parseError(Unknown Source)
at org.hsqldb.ParserBase.unexpectedToken(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
at org.hsqldb.Session.executeDirectStatement(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)

为什么 JPA 连接到 hsqldb 而不是 persistence.xml 中声明的 MariaDB?

附加信息:我使用的是 TomEE 8.0.0 M1

【问题讨论】:

  • 我只有persistence.xmlweb.xml 和一个pom.xml,没有任何properties 文件。 web.xml 是由 maven 创建的,没有被改动过。
  • Java源码只包含Bottle类,也就是@Entity
  • 如果您查看任何日志和完整堆栈跟踪,您应该会看到哪些代码导致“它”(即 TomEE)连接。即 EMF 在哪里实例化,由什么代码实例化,以及使用哪个持久性单元。

标签: hibernate apache-tomee persistence.xml jpa-2.2 tomee-8


【解决方案1】:

我将resources.xml 添加到WEB-INF(而不是META-INF/context.xml)中,内容如下,现在它可以工作了:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <Resource id="myDataSource" type="javax.sql.DataSource">
        jdbcDriver=org.mariadb.jdbc.Driver
        jdbcUrl = jdbc:mariadb://localhost:3306/qltb
        userName = root
        password = password
        maxActive = 20
</Resource>

TomEE 资源配置:http://tomee.apache.org/datasource-config.html

我仍然不知道persistence.xmlresources.xml 之间的关系记录在哪里(在这种情况下)。我什至不需要persistence.xml 中的&lt;jta-data-source&gt; 标签

【讨论】:

  • 我认为 tomee 采用了可用的数据源 (myDatasource)。
  • 我也搞不清楚persistence.xmlresources.xml之间的关系。
猜你喜欢
  • 2018-09-10
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
相关资源
最近更新 更多