我想创建基于实体的数据库。配置:
- Glassfish:GlassFish 服务器开源版 4.1(版本 13)
- Eclipselink:Eclipse 持久性服务 - 2.5.2.v20140319-9ad6abd(随 glassfish 提供)
- 数据库:PostgreSQL 版本:9.4.2
- 驱动程序:PostgreSQL 本机驱动程序版本:PostgreSQL 9.4 JDBC4.1(内部版本 1201)
从 eclipselink 开始创建数据库的那一刻起,在将大量日志参数设置为最优秀后,我会在日志中看到以下语句:
- 从表名中选择 ID WHERE ID ID
- SELECT 1
如此重复 4-5 次。第一个查询给出了以下明显的 postgres 错误:
org.postgresql.util.PSQLException:错误:关系“table_name”不存在
位置:16
结果,以下查询给出以下错误:
org.postgresql.util.PSQLException:错误:当前事务被中止,命令被忽略,直到事务块结束
在此之后 eclipselink 继续创建表:
CREATE TABLE 表名(ID BIGINT NOT NULL,主键(ID))
但会产生相同的错误。
由于某种原因,创建数据库发生在事务中。我找到了负责的源代码,但我无法找出事务是如何启动的。我可以提供更详细的信息,但也许现在有人可以提供帮助。
编辑:persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="h ttp://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="AntennasOperatingSystemServerPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>MyDatabase</non-jta-data-source>
<class>... bunch of classes ... </class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.logging.level" value="ALL"/>
<property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.DefaultSessionLog"/>
<property name="eclipselink.deploy-on-startup" value="true"/>
<property name="eclipselink.ddl-generation.output-mode" value="database"/>
<property name="eclipselink.logging.level.sql" value="FINEST"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.target-database" value="PostgreSQL" />
</properties>
</persistence-unit>
</persistence>
您是否尝试过设置eclipselink.target-database
财产给PostgreSQL
or org.eclipse.persistence.platform.database.PostgreSQLPlatform
?
如果上述方法不能解决问题,请分享您的 persistence.xml 文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)