Da quello che so la strategia GeneratedValue è riservata alla chiave primaria, il che significa che puoi usarla solo una volta per Entità.
A seconda delle tue esigenze hai però alcune opzioni:
-
Puoi sempre avere un evento del ciclo di vita prePersist , impostando qualsiasi valore che ti piace per il nome prima di mantenerlo la prima volta.
-
Se dipendi dall'id per generare un altro ID univoco da esso, potresti implementare un evento postPersist, impostare il tuo nome lì e assicurarti di svuotare due volte (la prima volta per generare la chiave primaria, la seconda volta per salvare il nome).
-
Se per te va bene che il nome sia vuoto nel database per un po' di tempo, potrebbe essere opportuno implementare un evento postLoad, che riempie il nome se è vuoto. In questo modo la tua applicazione vede sempre il nome (perché è caricato dal database o riempito dall'evento postLoad) e quando aggiungi o modifichi le informazioni la prima volta dopo il salvataggio iniziale, verrà salvato anche il tuo nome
-
Potrebbe andare bene non salvare il nome e averlo generato da alcuni cronjob/deamon/queue in modo che la tua applicazione non debba occuparsene. L'unica cosa che dovresti fare è assicurarti che un nome mancante non rovini qualcosa.
-
Forse potrebbe essere corretto generare una chiave che non dipende dalla chiave primaria e quindi può essere generata da un gestore di eventi globale . Ovviamente hai lo svantaggio che un tale gestore di eventi, poiché è globale, viene chiamato per ogni oggetto che persisti, non importa se è l'entità corretta.
-
Ultimo, ma non meno importante, potrebbe essere opportuno eseguire il fallback su Stored procedure/Trigger per consentire al database di gestirlo. In questo modo non devi pasticciare con questo all'interno della tua applicazione. Ma attenzione, potrebbero esserci delle insidie lungo la strada (come uno sviluppatore che se ne dimentica perché non è nel codice ma nel database!).
Potrebbero esserci altri modi. Quello che stavo cercando di dire è:non utilizzare generatedValue per le proprietà della chiave non primaria!