2010-07-30 14 views

cevap

14

(DB2, MySQL, Oracle üzerinde test ve SQL Server) iş gibi görünüyor Başka bir seçenek:

registerFunction("always_null", 
    new SQLFunctionTemplate(Hibernate.STRING, "cast(null as char)")); 
: Özel bir fonksiyonu ile

select id, cast(null as char), name from ... 

Sen hazırda lehçesini alt sınıf verebilir ve soyut

ve sonra HQL bu kullanmak: Ayrıca TO_CHAR (null) deneyebilirsiniz

select id, always_null(), name from ... 
+0

İlginç! Hala "gerçek" bir "null" ile "cast (null, char)" ya da "null" aldın mı? –

+0

Evet, bu gerçek bir boş. –

+0

Harika! Hazırda bekletmedeki genel çözüm yokluğunda, cildimizi korur. İyi olan şey, Java nesnelerle oynamak zorunda kalmayacağız – WSK

1

afaik yani vardır

select id, null, name from MyClass 

, senin sorgu olmaz Beklenen sonucu döndürdüğünüzde, null (sizin durumunuzda id) 'dan önce sütunlarını döndürür. Ancak, şu bu bir hata ya da sadece bir sigara desteklenen bir özellik olup olmadığını bilmiyorum

select id as first, '', name from MyClass 

çalışacak (hazırda forumlarında HQL help: possible to "select NULL as ..."? parçacığı bir böcek önermek görünüyor).

Neden buna ihtiyacınız olduğunu anladığımdan emin değilim (select new ifadesi alternatif olabilir mi?) Ama korkarım ki burada yerel SQL kullanmanız gerekecek.

+0

"Yeni Nesne (ID, null, name), MyClass" öğesini seçin " , – WSK

+0

@ SJP Evet, biliyorum ama demek istediğim bu değil. Ben yeni Foo (id, name) 'i kullanarak ve kurucuda' null''a üçüncü bir öznitelik ayarlamayı kastetmiştim. –

+0

oh, ilk denemede noktanı kaçırdım şimdi anladım. Boşluğun gerçekten kritik olduğu durumlarda, yolunuza çıkabiliriz, ancak sık kullanımı varlık sınıflarını karıştırır. Mevcut durumum için BTW ilk öneriniz bir çekicilik gibi çalıştı. – WSK

1

. HQL-Oracle için iyi çalışıyor, yeni foo (id, isim, attr3), attr3 - String değeri

4

Null üretmek için nullif() işlevini kullanabilirsiniz.

İki argüman kabul eder. Bağımsız değişkenler eşitse, null değerini döndürür.

+0

Beni kurtardınız, çok teşekkür ederim. IMHO bu en temiz çözümdür. 'NULLIF (1,1)' kullanarak çalışıyoruz :) –

İlgili konular