IdentifierGenerationException: ids for this class must be manually assigned before calling save()

39 views
Skip to first unread message

Federico Lenzini

unread,
Sep 28, 2021, 9:42:58 AM9/28/21
to manydesigns-portofino-italian
Buonasera,
sul Database Postgresql abbiamo creato un campo id che genera automaticamente un uuid, per diverse esigenze abbiamo convertito tale valore in formato TEXT sempre sul DB.
Quando provo a creare un nuovo record portofino mi da l'errore presente nell'oggetto: IdentifierGenerationException: ids for this class must be manually assigned before calling save().

Mi sembra di capire che questo sia proprio legato al formato di dato, c'è maniera di risolvere direttamente in portofino? (se inserisco manualmente i dati nel DB l'id in formato TEXT mi si forma correttamente)
Grazie Mille
Un saluto
Federico


Alessio Stalla

unread,
Sep 28, 2021, 11:46:14 AM9/28/21
to manydesigns-po...@googlegroups.com
Ciao,

dipende come hai implementato il campo sul DB.

In generale, se un campo chiave non è riconosciuto come auto-increment, devi dire a Portofino (in realtà ad Hibernate) come calcolare l'ID.

In alcuni casi, potresti fornire tu l'ID (ad esempio recuperandolo con una query che interroghi il db) e settandolo sull'oggetto prima di salvarlo, tipo, in Groovy:

@Override
protected void doSave(object) {
    object.id = calcolaNuovoId()
    super.doSave(object)
}

Immagino tu abbia usato un trigger, quindi dipende da come è fatto il trigger, ma in generale dovresti riuscire a far funzionare la strategia descritta qui sopra.

In altri casi, ci sono delle strategie automatiche che puoi usare, ad esempio se usi una sequence puoi configurare il nome della sequence e lasciar fare il resto a Portofino/Hibernate. Per questo si possono registrare dei "generator" nel modello, ma:
  • Portofino ne supporta solo alcuni. Nel caso di un trigger, dovresti usare un "select generator" che recupera il valore dal db dopo l'inserimento, ma al momento questo non è implementato.
  • Non esiste interfaccia grafica per farlo, quindi devi agire sull'XML.
  • Inoltre se non ricordo male su Portofino 4 non tutti i tipi di generatore implementati in realtà funzionano a dovere (sul 5 invece sì).
In Portofino 5 in teoria puoi anche mettere le annotazioni di Hibernate direttamente nel modello di Portofino, saltando il supporto nativo per i generator, ma questa è una cosa piuttosto avanzata che non consiglierei per un caso come questo.

Alessio

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "manydesigns-portofino-italian" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a manydesigns-portofin...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/manydesigns-portofino-italian/da79de42-c559-4597-af86-eef4a7160b52n%40googlegroups.com.

Federico Lenzini

unread,
Sep 29, 2021, 4:33:33 AM9/29/21
to manydesigns-portofino-italian
Ciao Alessio,

su Portofino deve generare il codice in automatico come su database in un campo TEXT, devo evitare l'inserimento manuale(simile al codice fiscale).
E' possibile farlo direttamente da portofino
Grazie Mille
Un saluto
Federico


Alessio Stalla

unread,
Sep 30, 2021, 4:27:47 AM9/30/21
to manydesigns-po...@googlegroups.com
Sì le soluzioni che ho elencato non prevedono inserimento manuale

Reply all
Reply to author
Forward
0 new messages