JPA persistence.xml Я хочу, чтобы он подключался к MariaDB, но он всегда подключается к hsqldb - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть веб-приложение на Java,

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 класс, который содержит только идентификатори свойство String.

Когда я запускаю это веб-приложение, я вижу в журнале, что оно обрабатывает 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вместо MariaDB, как объявлено в persistence.xml?

Дополнительная информация: я использую TomEE 8.0.0 M1

1 Ответ

0 голосов
/ 04 декабря 2018

Я добавил 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.xml и resources.xml (в данном случае).Мне даже не нужен тег <jta-data-source> в persistence.xml

...