2012-06-29 9 views
5

viene visualizzato questo errore durante il tentativo di salvare i dati nel modello in db.[PersistenceException: errore durante il recupero della sequenza nextval]

@Entity 
public class User extends Model { 
    @Required 
    public String name; 
    @Email 
    public String email; 
    @Required @MaxLength(value=10) 
    public String username; 
    @Required @MinLength(value=4) 
    public String password; 
    @Id 
    public int id; 
} 

questa è la mia classe.

questo è l'errore mentre sto cercando di salvare il modello in db.

enter image description here

Io apprezzo qualsiasi sforzo per aiuto! grazie molto.

EDIT: struttura della tabella è qui enter image description here

+0

Si prega di mostrare la struttura della tabella (file sql che crea tabelle). E dicci su cosa stai lavorando, perché, se è su MySQL, non supporta le sequenze. –

+0

ho aggiunto la mia struttura di tabella, per favore vedi l'aggiornamento – doniyor

+0

hai usato ebean per generare le tue tabelle? –

risposta

10

Penso che con ebean bisogna nominare fisicamente e annotare il proprio ID. Potrebbe anche darsi che dica anche il nome del backing sequencer (non ricordo). This mostra come farlo.

+0

John, grazie mille! questo era il punto. Grande Stackoverflower! ;) – doniyor

+0

Anche questa soluzione ha funzionato per me (Play 2.0.4). La chiave stava aggiungendo questa annotazione al mio modello Utente: '@GeneratedValue (strategy = GenerationType.SEQUENCE, generator =" users_id_seq ")'. Non so se Play non identifichi correttamente la sequenza o cosa, ma funziona ora. Frustrante. – duma

+0

Dovevo anche definire la sequenza, altrimenti Hibernate mi avrebbe detto che non sapeva su users_id_seq: '@SequenceGenerator (name =" seq_gen_name ", sequenceName =" task_seq ") @GeneratedValue (strategy = GenerationType.SEQUENCE, generator =" seq_gen_name ") @Id ID lungo pubblico;' – Adrien

2

questo ha funzionato per me:

@Entity 
@Table(name = "table", schema = "schema") 
public class Bean extends Model{ 

    @Id 
    @Column(name = "idcolumn") 
    @SequenceGenerator(name="gen", sequenceName="schema.table_idcolumn_seq",allocationSize=1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "gen") 
    private int id; 
} 

Quando si utilizza il SequenceGenerator, si prega di mente questo bug in Hibernate: https://hibernate.atlassian.net/browse/HHH-7232

Ti costringe a scrivere lo schema direttamente nel sequenceName invece di utilizzare il campo dello schema nell'annotazione SequenceGenerator.

1

questo ha funzionato per me su classe di annotazione:

@SequenceGenerator(name = "SEQUENCE_NAME", sequenceName = "PST_BUSINESS.S_BUSINESS_DOMAIN") 
@Entity 
@Table(name = "TB_BUSINESS_DOMAIN", schema = "PST_BUSINESS") 
public class PstBusinessDomain extends PstAbstractBaseMappedEntity { 

Come ha detto Leo, questa strategia funziona per l'annotazione nel campo e anche nella classe.

Problemi correlati