2009-08-10 3 views
7

Come costruire stringa valida HQL, che equivale a campo di tabellaCome mettere "null" nella colonna usando HQL?

UPDATE SET = null DOVE ....

+0

potrebbe essere una domanda stupida, ma, questo aggiornamento SQL funziona da qualche console SQL? vale forse un vincolo NOT NULL sulla colonna 'campo'? –

+0

Lo sql è ok - funziona da console bene! –

risposta

2

vuoi dire alla rinfusa HQL aggiornare? Prova questo

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

È inoltre possibile utilizzare una versione con parametri di cui sopra

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

Nel codice:

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

Vedi documentation per i dettagli.

Se non si stanno eseguendo aggiornamenti in blocco, è necessario impostare la proprietà su NULL e mantenere l'entità normalmente.

+0

Grazie, ma ... entrambe le versioni lanciano HibernateException !!! setString ("param", myValue) executeUpdate(); funziona solo quando myValue non è nullo !!! –

+0

Che tipo di HibernateException (cosa dice l'errore)? La tua tabella autorizza NULL in quella colonna? Quella proprietà è in realtà una stringa o è di qualche altro tipo? – ChssPly76

+0

1. La colonna della tabella consente NULL 2. La proprietà è in realtà String (questo stesso problema con la colonna di tipo 'Date') 2. L'errore di Hibernate Exception purtroppo non è valido ('Autorizzazione UPDATE mancante sull'oggetto .....) . Non è vero: nel caso myValue sia una stringa vuota o non nullo - la colonna richiesta viene aggiornata senza problemi –

0

Perché la tua istruzione di aggiornamento deve essere eseguita in HQL? Hai questa tabella mappata su un'entità nel sistema? Se lo fai, allora puoi semplicemente impostare la proprietà che associa a quella colonna su null, ed eseguire un salvataggio su quell'entità. per esempio.

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

Questo dovrebbe funzionare per te, ma devi avere un'entità mappata alla tabella in questione.