2009-08-10 12 views
7
NEREDE

HQL kullanarak 'null' sütuna nasıl yazılır?

UPDATE tablo SET alanı = null eşdeğerdir geçerli HQL dize, nasıl oluşturulur

....

+0

aptalca bir soru olabilir, ancak bu sql güncelleştirmesi bazı sql konsollarından çalışıyor mu? yani 'alan' sütununda belki NULL değil bir kısıtlama var mı? –

+0

sql tamam - konsoldan iyi çalışıyor! –

cevap

2

toplu HQL güncellemek ifade ediyor mu? Bu

UPDATE myEntity e SET e.myProperty = null WHERE ... 

Ayrıca kodunda yukarıdaki

UPDATE myEntity e SET e.myProperty = :param WHERE ... 

bir parametreli sürümünü kullanabilirsiniz deneyin:

int updatedEntities = session.createQuery(updateQueryHQL) 
    .setString("param", myValue) // or .setString("param", null) 
    .executeUpdate(); 

Detaylar için documentation bakınız.

Toplu güncelleştirmeler yapmıyorsanız, mülkünüzü NULL olarak ayarlamanız ve öğeyi normal olarak sürdürmeniz gerekir.

+0

Teşekkürler, ama ... her iki sürümde de HibernateException var! setString ("param", myValue) executeUpdate(); yalnızca myValue boş değilken çalışır! –

+0

Ne tür bir HibernateException (hata ne diyor)? Tablonuz o sütunda NULL'lere izin veriyor mu? Bu özellik aslında bir String mi yoksa başka türde mi? – ChssPly76

+0

1. Tablo sütunu NULLs 2'ye izin verir. Özellik aslında Dize ('Tarih' sütunuyla aynı sorun) 2. Hazırda bekletme hatası maalesef geçersizdir ('UPDATE izni nesne eksik .....') . True değil: myValue boş bir dize veya boş değer değilse - istenen sütun sorunsuz olarak güncelleştirilir –

0

Güncelleme bildiriminizin neden HQL'de yapılması gerekiyor? Sistemdeki bir varlığa eşlenen bu tablo var mı? Bunu yaparsanız, o sütunla eşlenen mülkünü null olarak ayarlayabilir ve bu varlık üzerinde tasarruf edebilirsiniz. Örneğin.

myObject.setMyProperty (null); getSessionFactory(). GetCurrentSession(). Save (myObject);

Bu sizin için uygun olmalı, ancak söz konusu tabloyla eşlenmiş bir varlığa sahip olmanız gerekir.

İlgili konular