2009-08-10 10 views
7

Jak zbudować prawidłowy ciąg HQL, która jest równoważnaJak wstawić 'null' do kolumny używając HQL?

UPDATE tabela SET pole = null WHERE ....

+0

może być głupie pytanie, ale czy ta aktualizacja sql działa z niektórych konsoli sql? np. czy może masz ograniczenie NOT NULL w kolumnie "pole"? –

+0

sql jest ok - działa z konsoli w porządku! –

Odpowiedz

2

Czy oznacza luzem HQL aktualizować? Spróbuj tego

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

Można również użyć parametryczne wersję powyższej

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

W kodzie:

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

Zobacz documentation szczegóły.

Jeśli nie wykonujesz aktualizacji zbiorczych, powinieneś ustawić właściwość na wartość NULL i normalnie utrzymywać obiekt.

+0

Dzięki, ale ... obie wersje rzucają HibernateException !!! setString ("param", myValue) executeUpdate(); działa tylko wtedy, gdy myValue nie ma wartości NULL !!! –

+0

Jaki rodzaj HibernateException (co mówi błąd)? Czy Twoja tabela dopuszcza wartości NULL w tej kolumnie? Czy ta właściwość jest w rzeczywistości łańcuchem czy jest innego rodzaju? – ChssPly76

+0

1. Kolumna tabeli zezwala na wartości NULL 2. Właściwość jest w rzeczywistości ciągiem (ten sam problem z kolumną typu "Data") 2. Błąd błędu hibernacji jest niestety nieważny ("Brak pozwolenia na aktualizację obiektu .....) . Nie jest prawdą: w przypadku, gdy moja_wartość jest pustym ciągiem lub nie ma wartości null - żądana kolumna jest aktualizowana bez problemów –

0

Dlaczego twoja instrukcja aktualizacji musi być wykonana w HQL? Czy ta tabela została zmapowana do jednostki w systemie? Jeśli to zrobisz, możesz po prostu ustawić właściwość, która odwzorowuje tę kolumnę na wartość null, i uruchomić zapis na tej encji. na przykład.

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

To powinno zadziałać dla ciebie, ale musisz mieć obiekt odwzorowany na tabelę, o której mowa.

Powiązane problemy