Düzenleme1: Hibernate, MS-SQL’e bağlandığında tüm kolon ve tabloları tanıyor. Bakınız.

Fakat DB2’ya bağlandığında, tablo ve sütun isimlerinin içerisinde “i” harfi geçenleri yeniden oluşturmaya çalışıyor. Bakınız

DB2’daki tablo ve kolonları incelediğimde tamamının büyük harf ile oluşturulduğunu farkettim. Aslında DB2 üzerindeki herşey büyük harf. Anladığım kadarıyla; Hibernate sorguyu oluştururken küçük harf kullanıyor ve DB2 büyük harf duyarlılığından dolayı kolon isimlerini tanımıyor. Bunun sonucunda

WARN SqlExceptionHelper: SQL Error: -99999, SQLState: 42703 
15:15:22,025 ERROR SqlExceptionHelper: An undefined column name was detected.

hatası veriyor. Hata Logları

Bu durumda ben ne yapmalıyım ki Hem MS-SQL'de hem de DB2 üzerinde çalışan bir program yazabileyim. Yada ben hatayı yanlış yerde mi arıyorum?


Database'im DB2. Hibernate (JPA) kullanıyorum. DB2'ya bağlanmak için JT400 kullanıyorum.

DB2 üzerinde tablolar oluşuyor. DB2'ya kayıt yapabiliyorum. Ancak Select komutunda

WARN SqlExceptionHelper: SQL Error: -99999, SQLState: 42703
SqlExceptionHelper: An undefined column name was detected.

hatası veriyor. Loglardaki hibernate'in oluşturduğu sorguyu alıp başka yerde doğrudan çalıştırdığımda sonuç geliyor.

Sorunun nedeni ne olabilir?

root-context:

<bean id="dataSourceDB2" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close" p:driverClass="com.ibm.as400.access.AS400JDBCDriver"
        p:jdbcUrl="jdbc:as400://10.0.1.1/GULERP" p:user="AKIF"
        p:password="AO" p:acquireIncrement="5" p:idleConnectionTestPeriod="60"
        p:maxPoolSize="100" p:maxStatements="50" p:minPoolSize="10"  />

    <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="true" />
                <property name="databasePlatform" value="org.hibernate.dialect.DB2400Dialect" />
            </bean>
        </property>
        <property name="dataSource" ref="dataSourceDB2" />
    </bean>

Sorgu oldukça basit:

Query qry = em.createQuery("Select m from Holding m where m.isDeleted=0");
            holdLst = qry.getResultList();

soruldu: 05 Tem '12, 04:31

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

değiştirildi: 10 Tem '12, 09:20

C3P0 yerine BasicDataSource kullandığımda da aynı hatayı veriyor:

<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSourceDB2_1" destroy-method="close">
    <property value="com.ibm.as400.access.AS400JDBCDriver" name="driverClassName"/> 
    <property value="jdbc:as400://10.0.1.1/GULERP" name="url"/> 
    <property value="AKIF" name="username"/> 
    <property value="AO" name="password"/> 
    <property value="5" name="initialSize"/>
</bean>
(05 Tem '12, 04:36) SaRPaRDa SaRPaRDa's gravatar image

HSQL DB'de sorunsuz çalışıyor.

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" p:driverclass="org.hsqldb.jdbcDriver" p:jdbcurl="jdbc:hsqldb:&lt;a href=" hsql:="" localhost:9006="" gulsanerp""="">hsql://localhost:9006/gulsanerp" p:user="sa" p:password="" p:acquireIncrement="5" p:idleConnectionTestPeriod="60" p:maxPoolSize="100" p:maxStatements="50" p:minPoolSize="10" />

(05 Tem '12, 05:43) SaRPaRDa SaRPaRDa's gravatar image

Sanırım sorun DB2'nun büyük harf/ küçük harf ayrımından kaynaklanıyor.

MS-SQL'e bağladığımda tüm tabloları ve fieldleri görüyor. Log dökümü: http://chopapp.com/#8kvl5v3a

Fakat DB2'ya bağlandığımda içerisinde "i" harfi geçen tabloları yebiden oluşturmaya çalışıyor. Ve tabii içerisinde "i" harfi geçen kolonarıda. Log Dökümü: http://chopapp.com/#bg4x8aki

Bu sorunu nasıl aşarım?

(10 Tem '12, 05:25) SaRPaRDa SaRPaRDa's gravatar image

SqlExceptionHelper: An undefined column name was detected.

Hataya gore aklima gelenler:

  1. Holding entity'deki column tanimlamalarinizla veritabanindaki kolonlar uyusmuyor olabilir. DB Table column'larla Holding entity column'lari karsilastirin.

  2. Query parametresi vererek deneyin(Query'de isDeleted gibi degil de entity column adiyla verin):


// query param ile
Query qry = em.createQuery("Select m from Holding m where m.deleted = :prmDeleted");
qry.setParameter("prmDeleted", 0);
holdLst = qry.getResultList();

// parametresiz de olmasi lazim aslinda
Query qry = em.createQuery("Select m from Holding m where m.deleted = 0");
holdLst = qry.getResultList();

permanent link

cevaplandı: 05 Tem '12, 06:49

CemIkta's gravatar image

CemIkta ♦
19.9k29125190
cevap kabul oranı: 36%

Hiç kriter vermeden denedim. Yine aynı problemi veriyor. SQL Kodu:

select holding0_.HoldingId as HoldingId1_, holding0_.InsertDate as InsertDate1_, holding0_.IsDeleted as IsDeleted1_, holding0_.SavesUserId as SavesUse4_1_, holding0_.UpdateDate as UpdateDate1_, holding0_.Updater as Updater1_, holding0_.Description as Descript7_1_, holding0_.Name as Name1_ from Holding holding0_

Bu kodu alıp Database explorerda çalıştırdığımda bir sorun yok. Datasource'ü HSQL DB'ye ayarladığımda yine sorun yok.

JPA'nın Query translate ederken, DB2'ya göre oluşturması gibi bir durum mu var acaba?

(05 Tem '12, 07:03) SaRPaRDa SaRPaRDa's gravatar image

JPA/Hibernate her DB'ye ozel syntax'larla olusturuyor SQL'leri. Zaten console'da cikan sql DB2 icin Hibernate tarafindan olusturulmus SQL. SQL'de bir column vererek(holdingName veya name varsa) dener misin hata geliyor mu? (SELECT m.name FROM Holding m)

(05 Tem '12, 07:32) CemIkta ♦ CemIkta's gravatar image

Evet Geliyor o zaman.

(05 Tem '12, 08:22) SaRPaRDa SaRPaRDa's gravatar image

Acaba JPA isDeleted column ile isDeleted methodu karistiriyor olabilir mi? Column adi : deleted getter: isDeleted() setter: setDeleted() vererek dener misin entity class'da.

(05 Tem '12, 08:40) CemIkta ♦ CemIkta's gravatar image

Üstad anladığım kadarıyla ilk harfi "i" olanlarda sorun çıkarıyor. "insertdate" isimli kolonda da hata verdi. Diğer kolonları da tek tek ekleyip çıkararak deneyip emin olacağım.

Ek bilgi olarak şunu söyleyebilirim, DB2 üzerindeki tüm kolon isimleri büyük harfe çevrilmiş.

(05 Tem '12, 09:11) SaRPaRDa SaRPaRDa's gravatar image

isDeleted'i değiştirdim. RDeleted yaptım, olmadı... i harfi ile alakalı olmadığı ispatlandı.

MS-SQL Server'e bağlandım herşey normal çalışıyor. DB2'ya bağlanınca aynı hatayı veriyor.

Hibernate'in oluşturduğu sorguyu AS-400 ekranından çalıştırdım, çalışıyor.

Neden olduğunu anlayamadım???

(05 Tem '12, 14:51) SaRPaRDa SaRPaRDa's gravatar image

Log dökümünü

http://chopapp.com/#dhtg1enz

adresine ekledim.

(05 Tem '12, 14:55) SaRPaRDa SaRPaRDa's gravatar image
-1

m diye bir column varmı Holding tablosunda ?

Query qry = em.createQuery("from Holding m where m.deleted = 0"); //denebilirsin.

Query qry = em.createQuery("Select m.* from Holding m where m.deleted = 0");

(05 Tem '12, 15:53) gklp gklp's gravatar image

Aynı hatayı veriyor. Zaten sorgu Ms-SQL ve HSQDL'de çalışıyor.

(05 Tem '12, 16:01) SaRPaRDa SaRPaRDa's gravatar image

"Diğer kolonları da tek tek ekleyip çıkararak deneyip emin olacağım. " denedin mi bunu hangi kolonu ekleyince veriyormuş ?

hibernate source kodu ekli ise debug yap istersen.

(05 Tem '12, 16:22) gklp gklp's gravatar image

Kolonları tek tek eklersem sorgularken hata vermiyor.

(06 Tem '12, 02:34) SaRPaRDa SaRPaRDa's gravatar image
11 yorumdan 5 tanesi gösteriliyor hepsini göster
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×109
×86
×3
×1

Soruldu: 05 Tem '12, 04:31

Görüntüleme: 1,300 kez

Son güncelleme: 11 Tem '12, 04:35

powered by BitNami OSQA