Persistenza di un campo enum

5 views
Skip to first unread message

mick...@posteo.net

unread,
Jun 29, 2022, 3:25:11 AM6/29/22
to Java User Group TAA
Buongiorno.
In breve: ho una classe @Entity che contiene un campo enum
(JPA/Hibernate). Avrei bisogno di stabilire una mappatura tra
l'etichetta dell'enum ed il valore salvato sulla colonna del DB. Dopo
qualche tentativo, ho trovato questa soluzione:

public enum UnEnum {
ETICHETTA_1("e1"),
ETICHETTA_2("e2"),
...
ETICHETTA_N("eN");

String etichetta;
UnEnum(String etichetta) {...}
static public UnEnum of(String etichetta) {...}
}

@Converter //javax.persistence
public class UnEnumConverter implements AttributeConverter<UnEnum,
String> {// javax.persistence
}

Et voilà! Tutto funziona... con due enum su tre!
Il terzo mi mette in difficoltà con i CrudRepository di spring-data,
perché il metodo che fa la select, non mi trova nulla. Però va
specificata meglio tutta l'architettura, che è un po' articolata.

@Entity
public class ClasseEntity {
@EmbeddedId
NomeTipo nomeTipo;

... altri campi
}

@Embeddable
public class NomeTipo implements Serializable { //Serializable è
richiesto da @Embeddable
UnEnum tipo;
String nome;

...
}

Sul DB la tabella ClasseEntity comprende le due colonne tipo e nome
(CHAR e VARCHAR), che assieme costituiscono la chiave primaria. Infine
il repository:

public interface ClasseEntotyRepository extends
CrudRepository<ClasseEntity, NomeTipo> {
ClasseEntity findByNomeTipo(NomeTipo id);
}

Quest'ultimo metodo mi ritorna null, nonostante il DB contenga i dati
giusti.

Magari qualcuno ha già sbattuto la testa su un problema analogo, e sa
indirizzarmi?

--
Michele

stephan....@gmail.com

unread,
Jun 29, 2022, 4:11:18 AM6/29/22
to JUG Trentino Alto Adige Suedtirol
Forse trovi la soluzione ai tuoi problemi qui:

È da tempo che leggo gli articoli del blog di Vlad. È uno dei più attivi e spiega le cose in modo chiaro.

Stephan

mick...@posteo.net

unread,
Jun 29, 2022, 5:43:01 AM6/29/22
to jug...@googlegroups.com


On 29.06.2022 10:11, stephan....@gmail.com wrote:
> Forse trovi la soluzione ai tuoi problemi qui:
>
> https://vladmihalcea.com/the-best-way-to-map-an-enum-type-with-jpa-and-hibernate/
>
> È da tempo che leggo gli articoli del blog di Vlad. È uno dei più
> attivi e spiega le cose in modo chiaro.
>
Purtroppo no. Quello che fa lui è associare ogni etichetta ad una
stringa contenente l'etichetta. Naturalmente questa sarà la mia
soluzione di backup, se non trovo altro. Ma io volevo che etichetta e
valore sul DB potessero essere differenti. Nel caso del mio esempio:
ETICHETTA_1 <--> "e1".
--
Mick

stephan....@gmail.com

unread,
Jun 29, 2022, 8:56:49 AM6/29/22
to JUG Trentino Alto Adige Suedtirol
Ho trovato un altro articolo:

Sembra che ci sia la possibilità di implementare un custom mapping, vedi AttributeConverter.
L‘esempio è con un int, ma dovrebbe funzionare anche con stringhe.
Potresti provare a vedere se questa potrebbe essere una soluzione per il tuo problema.

Stephan 

Reply all
Reply to author
Forward
0 new messages