Ho un database esistente che ora sto collegando all'utilizzo di hibernate. Al momento non posso modificare i dati al suo interno e fare in modo che tutto funzioni separatamente da una singola colonna.Hibernate Enum mapping usando annotaions
Ho una colonna di stato che ha i valori:
- nuovo
- spedita
- in
- fuori
e la colonna è mappata come segue:
@Column(name = "STATUS", nullable = false, length = 50)
@Enumerated(EnumType.STRING)
private TeamMemberStatus status;
Mi piacerebbe davvero (per motivi di applicazione) di avere questa colonna mappata come un Enum Java (TeamMemberStatus), ma a causa del fatto che il 'nuovo' è una parola chiave in Java non posso avere che come membro enum.
Se ho i conflitti di enumerazione NEW, MAILED, IN e OUT, l'ibernazione non riesce poiché EnumType esegue Enum.valueOf().
C'è un modo per me di mappare questo al mio Enum senza dover scrivere un UserType complesso?
- contenuto aggiunto
mio Enum in questo modo:
public enum TeamMemberStatus {
NEW, MAILED, IN, OUT
}
è un enum Java valida, ma che non corrisponde il caso del database. Se cambio in modo che corrisponda al database come:
public enum TeamMemberStatus {
new, mailed, in, out
}
Non verrà compilato come 'nuovo' è una parola riservata Java.
Suppongo che vogliate cambiare i dati nel database? Qualcosa come aggiornamento TABLE set status = upper (status). Non riesco a farlo poiché interromperà le applicazioni esistenti che parlano di quei dati che si aspettano come un valore in minuscolo. – stevemac
@stevemac aggiornato –
Questo è ciò che ho risolto alla fine, memorizzando la stringa internamente e mappandola da/a enum quando vengono chiamati i get/set. Dovrà fare a breve termine, fino a quando non riesco a ottenere tutte le app aggiornate per utilizzare le costanti in maiuscolo. – stevemac