Come creare campo case-insensitive su Java POJO. Alla ricerca di un buon design.
-
12-10-2019 - |
Domanda
Così sto usando GigaSpaces XAP con Hibernate plugin per caricare la mia tabella di DB nel loro nascondiglio griglia, purtroppo per interrogare la rete che non supportano direttamente case insensitive ricerche.
hanno offerto 2 soluzioni:
1- interrogazione Usa LIKE (uguale a SQL), che è lento (Wont nemmeno con questo)
2- Creare una proprietà separata dei campi che vogliono avere case insensitive.
Così ora le mie scelte sono:
1- Creare una colonna aggiuntiva nel DB di avere campo case-insensitive (non in questo tempo di vita)
2- Creare un plugin di dati loader personalizzato per XAP tale che il momento in cui i dati vengono caricati il ??campo è memorizzato in un properperty "ToLower". (Supportato ma lascerà come ultima risorsa)
sto sicuramente non andare con # 1 e mi lascerà il caricatore di dati personalizzati come ultimo risultato. Quindi la mia idea è quella di ...
class Person {
String firstName
String firstNameLower
public void setFirstName(String firstName) {
this.firstName = firstName
this.firstNameLower = firstName.toLowerCase(...);
}
}
Sarà questo lavoro con Hibernate? Come il Dataloader GigaSpace utilizza Hibernate e il mio POJO è praticamente una classe di entità. Sto utilizzando il mapping XML Hibernate non annotazioni. I campi "ToLower" non verranno mappati. Fa Hibernate chiamata setXXX () su tutti i campi che sono mappati o lo fa fare qualche sostituzione del codice di fantasia sotto il cofano e non chiama il setXXX () metodi.
Sto anche pensando un'annotazione sarebbe un buon uso qui, ma non è sicuro come implementare loro o anche se è possibile, per questo caso.
Soluzione 2
Per chiunque sia interessato.
È sufficiente creare un "tolower ()" il metodo del campo e aggiungere l'annotazione indice su quella ed è possibile mappare il POJO per ibernare il solito modo.
Altri suggerimenti
ibernazione fa oggetti di uso del proxy, ma i dati sono ancora memorizzate nel vostro oggetto e Hibernate userà i getter / setter implementazioni forniti dall'utente, in modo dalla soluzione dovrebbe funzionare se si desidera impostare la versione minuscola, anche se non sono chiare perché avete bisogno di una variabile un'istanza separata per memorizzare la versione minuscola.
questo articolo va oltre le nozioni di base proxy.
Se si configura Hibernate per utilizzare i campi accessor metodo (e non accedere direttamente i campi) il suo comportamento predefinito è quello di utilizzare tutto il metodo del setXXX ().
Credo che nel tuo caso la soluzione migliore sarebbe (se Hibernate viene usato solo per GigaSpace) per personalizzare il modo Hibernate caricare i dati, attraverso la definizione di un tipo personalizzato utilizzando StringType Standrd per caricare i dati poi convertirlo in minuscolo. ..
Nel frattempo, se il sistema richiede dati minuscole, non puoi assicurarsi che tutte le stringhe inserite nella banca dati sono minuscolo?