2015-08-21 61 views
0

當我嘗試使用item.persist()時,它失敗。雖然我看不到最終的SQL語句,但它在綁定參數之前顯示調用,並且架構丟失。
當我創建實體管理器時,我正在使用屬性圖的方法。 所以,也許我使用了錯誤的屬性名稱,我正在從網上的各種示例中工作。 我正在使用EclipseLink並訪問Netezza數據庫。 我創建EntityManager後,這裏是從getProperties()輸出:jpa在插入時缺少shema

電磁特性:

{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> 

什麼是架構中的正確的屬性?沒有列出任何建議的屬性。它需要找到正確的表...

+0

你試過這個嗎? http://stackoverflow.com/questions/3211138/jpa-eclipselink-how-to-change-default-schema – gerosalesc

回答

0

我覺得「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" /> 
+0

謝謝你的建議,我也有persistence.xml中的這些屬性,請參閱上面我更新的問題描述。 –

+0

這同樣的問題被問及並在這裏回答:[JPA - EclipseLink - 如何更改默認架構](http://stackoverflow.com/questions/3211138/jpa-eclipselink-how-to-change-default-schema) 您可以使用orm.xml文件覆蓋整個持久性單元的模式,也可以根據需要在每個表註釋或xml元素中定義它。 –

+0

「INSERT INTO RT.PERSON」 關於更改默認模式的工作原理。請注意,我最初使用eclipse中的JPA工具來添加模式。它創建了orm.xml文件並使用其位置更新了persistence.xml。但是,它只添加了SCHEMA行,而不是行。我可能使用了錯誤的工具......但要檢查一下。增加了像這個例子那樣的行,它工作。再次感謝! –

0

屬性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> 

和新文件的ORM .xml在META-INF文件夾中:

<?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 
+0

感謝所有人,對orm.xml和persistence.xml的更新解決了這個問題。 –