編輯1: 當Hibernate連接到MS-SQL時,所有列和表都在掃描。 LogsJPA + DB2無法執行簡單查詢
但是,當Hibernate連接到DB2時,它試圖再次製作(渲染)包含''我''字母的所有表和列。 Logs
我掃描我意識到,所有的字母是big.In事實表和列後,每一個字母是在DB2大。 Hibernate使用小寫字母進行查詢,並且由於DB2的大字母敏感性,它不會實現列名。出於這個原因,它提供了一個報警器是在下面,
WARN SqlExceptionHelper: SQL Error: -99999, SQLState: 42703
15:15:22,025 ERROR SqlExceptionHelper: An undefined column name was detected.
我怎樣才能解決這個問題?
我必須使用jpa從db2中的表中檢索數據。 當我嘗試使用實體管理器執行查詢時,我得到的錯誤不知道問題出在哪裏。 我的代碼在MS-SQL和HSQL-DB運行...但我連接DB2消息錯誤:*
查詢QRY = em.createQuery(「持有H其中h.RDeleted =: ARG1" ); -
13:26:38135 DEBUG SQL:選擇holding0_.HoldingId如HoldingId1_,holding0_.RDeleted如RDeleted1_,holding0_.InsertDate如InsertDate1_,holding0_.SavesUserId如SavesUse4_1_,holding0_.UpdateDate如UpdateDate1_,holding0_。更新程序爲Updater1_,將0_.Description保存爲Descript7_1_,將Holding_0_.HoldingName保存爲HoldingN8_1_來自Holding holding0_,其中holding0_.RDeleted =? Hibernate:選擇hold0_.HoldingId作爲HoldingId1_,保持0_.RDeleted爲RDeleted1_,保持0_.InsertDate爲InsertDate1_,保持0_.SavesUserId爲SavesUse4_1_,保持0_.UpdateDate爲UpdateDate1_,保持0_.Updater爲Updater1_,保持0_.Description爲Descript7_1_,保持0_.HoldingName爲HoldingN8_1_ Holding Holding0_ where hold0_.RDeleted =? 13:26:38428 WARN SqlExceptionHelper:SQL錯誤:-99999,SQLSTATE:42703 13:26:38428 ERROR SqlExceptionHelper:檢測到未定義的列名。
但查詢工作:
Select h.holdingId, h.holdingName, h.description from Holding h
我的數據源:
<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSourceDB2_JT400" destroy-method="close">
<property value="com.ibm.as400.access.AS400JDBCDriver" name="driverClassName"/>
<property value="jdbc:as400://192.168.1.1/GULERP" name="url"/>
<property value="user" name="username"/>
<property value="PW" name="password"/>
<property value="5" name="initialSize"/>
</bean>
我的EntityManager:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="erp" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.DB2400Dialect" />
</bean>
</property>
<property name="dataSource" ref="dataSourceDB2_JT400"/>
</bean>
和我的域:
@Entity
@AccessType("field")
@Table(name = "Holding", uniqueConstraints = {@UniqueConstraint(columnNames={"HoldingName"})})
public class Holding extends BaseClass implements Serializable {
transient static final long serialVersionUID = 5473887143181971744L;
@Id
@Column(name = "HoldingId", nullable = false, length=36)
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String holdingId;
@Basic(optional = false)
@Column(name = "HoldingName", nullable = false, length = 100)
private String holdingName;
@Column(name = "Description", length = 210)
private String description;
@OneToMany(mappedBy = "holdingId", fetch = FetchType.LAZY)
private List<Company> companyList;
比較在查詢中的所有列名在表中的所有列名,並找出哪一個是錯誤或丟失。 – 2012-07-09 11:38:27
我查過了,列名都是正確的。查詢執行,如果我手動寫入列名稱。並且我在DB2客戶端上檢查了hibernate查詢,查詢被執行。 – SaRPaRDa 2012-07-09 11:48:06
向我們展示您執行查詢的代碼以及實體的完整映射。 – 2012-07-09 11:55:26