Mi trovo a dare supporto ad un collega che sta lavorando ad un’applicazione presa in gestione da un altro collega.

Applicazione semplice, di inserimento e modifica dati su database mysql mediante interfaccia web, sviluppata con java e Hibernate. Un banale CRUD per farla breve.
Il database contiene già svariati record e stiamo guardando la parte di modifica dati.
Una tabella in particolare contiene un campo che è stato chiamato “interval”.
Passiamo qualche ora tra esperimenti e debugger inseguendo degli stani errori per scoprire alla fine che:

  • interval è una parola riservata di mysql e crea problemi ovviamente all’interno delle query, specie se di tipo “update … set interval = X …”. Questa la pagina ufficiale.
  • mysql non lancia errori in fase di creazione della tabella
  • mysql non lancia errori in fase di inserimento dati, forse perché sfortunatamente è stata usata la clausola di insert con l’elenco implicito dei campi quindi di fatto la parola “interval” non è stata usata, “insert into table (x,y,z,t)” invece che “insert into table (lista_campi) values (lista_valori)”.
  • Hibernate, come anche la riga di comando mysql, lancia un errore di sintassi SQL se provo a lanciare una update.
  • dalla riga di comando mysql riesco a non avere errori se mi riferisco al nome campo usando la notazione con anteposto il nome della tabella.

Alla fine abbiamo quindi risolto il problema semplicemente cambiando il nome al campo incriminato e modificando il file HBM relativo al POJO che si occupa di mappare la mia tabella. Potenza dell’ORM che permette di rimappare al volo senza avere impatti sul codice dell’applicazione.

Detta così sembra un problema semplice e banale ma in questi casi pensi a tutto ma non ad una cosa del genere. Inoltre mi aspetterei direttamente di non poter creare la tabella piuttosto che crearla, inserire i dati e avere problemi a posteriori.
Ad ogni modo, un’informazione in più da tenere a mente.