JPA 连接到另一个数据库,而不是我 persistence.xml 中指定的数据库
JPA connects to a different database instead of the one specified in my persistence.xml
这是我的坚持xml档案
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
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_1.xsd">
<persistence-unit name="GoodreadsJpa">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entity.Book</class>
<class>entity.Review</class>
<class>entity.UserActionLog</class>
<class>entity.User</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/goodreads_clone?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC;" />
<property name="eclipselink.jdbc" value="jdbc:mysql://localhost:3306/goodreads_clone?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC;"/>
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
</properties>
</persistence-unit>
如您所见,我提供了 jdbc url 用于连接到数据库。但是,当我 运行 我的应用程序时,我得到以下信息。
14:31:57,377 INFO [org.eclipse.persistence.connection] (default task-2) Connected: jdbc:h2:mem:test
User: ROOT
Database: H2 Version: 1.3.173 (2013-07-28)
Driver: H2 JDBC Driver Version: 1.3.173 (2013-07-28)
这表明我已连接到 jdbc:h2:mem:test,因此我无法执行所需的操作。
这让我觉得我连接到了错误的数据库?我是不是遗漏了什么?我怎样才能真正连接到我想要的数据库?
我正在使用 Wildfly 10 和 EclipseLink。没有使用 Maven。
1.You 需要将 mysql 驱动程序添加到 Jboss,就像这里:Can't add mysql driver to jboss
或这里
https://synaptiklabs.com/posts/adding-the-mysql-jdbc-driver-into-wildfly/
您需要在 standalone.xml 配置文件中添加 mysql 数据源,如下所示:
https://zorq.net/b/2011/07/12/adding-a-mysql-datasource-to-jboss-as-7/
<datasource jndi-name="java:/mydb" pool-name="my_pool" enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:mysql://localhost:3306/mydb</connection-url>
<driver>mysql</driver>
<security>
<user-name>root</user-name>
<password>root</password>
</security>
<statement>
<prepared-statement-cache-size>100</prepared-statement-cache-size>
<share-prepared-statements />
</statement>
</datasource>
假设您正在使用容器管理的 em,您应该在 Wildfly 配置中定义数据源 (standalone.xml
)。然后,您应该在持久性单元定义中使用 persistence-unit.jta-data-source
(或 persistence-unit.non-jta-data-source
)标记来引用您的数据源。
如果您同时需要 MySQL 和 H2 数据源,您可以创建多个持久化单元并使用 @PersistenceContext(name = "...")
区分它们
这是我的坚持xml档案
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
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_1.xsd">
<persistence-unit name="GoodreadsJpa">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entity.Book</class>
<class>entity.Review</class>
<class>entity.UserActionLog</class>
<class>entity.User</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/goodreads_clone?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC;" />
<property name="eclipselink.jdbc" value="jdbc:mysql://localhost:3306/goodreads_clone?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC;"/>
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
</properties>
</persistence-unit>
如您所见,我提供了 jdbc url 用于连接到数据库。但是,当我 运行 我的应用程序时,我得到以下信息。
14:31:57,377 INFO [org.eclipse.persistence.connection] (default task-2) Connected: jdbc:h2:mem:test
User: ROOT
Database: H2 Version: 1.3.173 (2013-07-28)
Driver: H2 JDBC Driver Version: 1.3.173 (2013-07-28)
这表明我已连接到 jdbc:h2:mem:test,因此我无法执行所需的操作。
这让我觉得我连接到了错误的数据库?我是不是遗漏了什么?我怎样才能真正连接到我想要的数据库?
我正在使用 Wildfly 10 和 EclipseLink。没有使用 Maven。
1.You 需要将 mysql 驱动程序添加到 Jboss,就像这里:Can't add mysql driver to jboss
或这里 https://synaptiklabs.com/posts/adding-the-mysql-jdbc-driver-into-wildfly/
您需要在 standalone.xml 配置文件中添加 mysql 数据源,如下所示: https://zorq.net/b/2011/07/12/adding-a-mysql-datasource-to-jboss-as-7/
<datasource jndi-name="java:/mydb" pool-name="my_pool" enabled="true" jta="true" use-java-context="true" use-ccm="true"> <connection-url>jdbc:mysql://localhost:3306/mydb</connection-url> <driver>mysql</driver> <security> <user-name>root</user-name> <password>root</password> </security> <statement> <prepared-statement-cache-size>100</prepared-statement-cache-size> <share-prepared-statements /> </statement> </datasource>
假设您正在使用容器管理的 em,您应该在 Wildfly 配置中定义数据源 (standalone.xml
)。然后,您应该在持久性单元定义中使用 persistence-unit.jta-data-source
(或 persistence-unit.non-jta-data-source
)标记来引用您的数据源。
如果您同时需要 MySQL 和 H2 数据源,您可以创建多个持久化单元并使用 @PersistenceContext(name = "...")