【问题标题】:jpa missing shema on insertjpa 在插入时缺少 shema
【发布时间】:2015-11-15 16:48:51
【问题描述】:

当我尝试使用item.persist() 时,它失败了。虽然我看不到最后的 sql 语句, 它确实在绑定参数之前显示调用并且缺少架构。
当我创建实体管理器时,我使用的是属性映射方法。 所以,也许我使用了错误的属性名称,我正在使用网络上的各种示例。 我正在使用 EclipseLink 并访问 Netezza 数据库。 创建EntityManager 后,这是getProperties() 的输出:

em 属性:

{javax.persistence.jdbc.url=jdbc:netezza://server.com:5480/databaseName, javax.persistence.jdbc.password=xxxx, openjpa.jdbc.Schema=RT, javax.persistence.jdbc.driver=org.netezza.Driver, javax.persistence.jdbc.user=xxxx}

openjpa.jdbc.Schema=RT 在属性中设置为正确的值。

更新: 我的 persistence.xml 中还有以下值:

    <properties>
        <property name="openjpa.jdbc.Schema" value="RT" />
        <property name="javax.persistence.jdbc.url" value="jdbc:netezza://server.com:5480/database"/>
        <property name="javax.persistence.jdbc.user" value="xxxxx"/>
        <property name="javax.persistence.jdbc.password" value="xxxx"/>
        <property name="javax.persistence.jdbc.driver" value="org.netezza.Driver"/>
    </properties>

架构的正确属性是什么?这未在任何建议的属性中列出。需要找到正确的表...

【问题讨论】:

标签: java jpa


【解决方案1】:

我认为“openjpa.jdbc.Schema”属性不正确,因为它似乎对应于 Apache OpenJPA 实现的配置

要实现 EclipseLink,需要在您的 persistence.xml 中定义以下属性

<property name = "eclipselinkj.dbc.driver" value = "org.netezza.driver" />
<property name = "eclipselink.jdbc.url" value = "jdbc: Netezza: //server.com: 5480 / databaseName" />
<property name = "eclipselink.jdbc.password" value = "xxxx" />
<property name = "eclipselink.jdbc.user" value = "user" />

见:Configuring the Persistence Unit

或者如果你想使用标准的 JPA

<property name = "javax.persistence.jdbc.driver" value = "org.netezza.driver" />
<property name = "javax.persistence.jdbc.url" value = "jdbc: Netezza: //server.com: 5480 / databaseName" />
<property name = "javax.persistence.jdbc.password" value = "xxxx" />
<property name = "javax.persistence.jdbc.user" value = "user" />

【讨论】:

  • 感谢您的建议,我在persistence.xml中也有这些属性,请参阅上面更新的问题描述。
  • 这里提出并回答了同样的问题:JPA - EclipseLink - How to change default schema 您可以使用 orm.xml 文件覆盖整个持久性单元的架构,或者根据需要在每个表注释或 xml 元素中定义它。
  • "INSERT INTO RT.PERSON" 关于更改默认模式的文章有效。注意,我一开始在 eclipse 中使用 JPA 工具来添加模式。它创建了 orm.xml 文件并使用其位置更新了 persistence.xml。但是,它只添加了 SCHEMA 行,而不是 行。我可能错误地使用了该工具......但是需要检查一些东西。像示例一样添加了这些行,并且有效。再次感谢!
  • 很高兴,不要忘记将答案标记为已回答,以便其他人看到。
【解决方案2】:

属性 openjpa.jdbc.Schema 仅适用于 OpenJPA 实现,绝对不适用于 eclipselink。 JPA 中指定模式的标准方法是每个实体使用@Table 注释的模式属性。或者,如果您需要为所有实体指定它,您可以在 persistence.xml 之外创建一个额外的映射文件,您可以在其中定义 XML 中的默认模式:

persistence.xml:

...
  <persistence-unit name="MySchemaPU"  transaction-type="JTA">
     <mapping-file>META-INF/orm.xml</mapping-file>

以及 META-INF 文件夹中的新文件 orm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
                 version="1.0">
 <persistence-unit-metadata>

  <persistence-unit-defaults>
   <schema>RT</schema>
  </persistence-unit-defaults>
 </persistence-unit-metadata>
</entity-mappings

【讨论】:

  • 感谢大家,orm.xml 和 persistence.xml 的更新解决了这个问题。
猜你喜欢
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 2020-10-25
  • 2016-09-27
相关资源
最近更新 更多