Ho questo strano scenario in cui viene usata la proprietà Java per costruire e la query HQL, e il tipo del campo è Boolean
, cioè è in scatola. Mi sono chiesto perché, perché non mi piace pensare ai valori booleani come aventi tre possibili valori, true
, false
e null
. Recentemente ho scoperto che il valore di null
ha effettivamente la semantica in questo sistema. Le semantiche sono: true
significa "solo non visualizzate", false
significa "solo visualizzate" e null significa "tutte". Quindi, se null, il campo viene ignorato quando si crea la query HQL, in modo che il risultato finale contenga sia risultati non visualizzati che visualizzati.
Secondo me questo è un caso in cui dovrebbe essere usato un enum. Qualcosa del genere:
enum ViewStatus {
VIEWED, UNVIEWED;
}
Il mio dilemma ora è cosa usare per il terzo caso che dovrebbe rappresentare l'unione di queste due costanti? Le due opzioni sono:
-
Introduci una terza costante enum,
ALL
.enum ViewStatus { VIEWED, UNVIEWED, ALL; }
-
Utilizza
EnumSet
.
EnumSet
praticamente esiste appositamente per questo scopo, ma ... sembra che ci siano solo due overhead. Soprattutto quando si leggono i valori nella parte del codice che costruisce l'HQL.
Quindi, quali sono i tuoi pensieri? Devo andare con una terza costante enum e refactoring a EnumSet
quando sorge la necessità?
Grazie!
Aggiornamento
Vado per un EnumSet
perché voglio introdurre metodi su quell'enumerazione che non avrebbe senso essere chiamata su ALL
. Ad esempio ViewStatus.isViewed()
.