2012-06-29 14 views
5

obtengo este error al intentar guardar datos en el modelo en db.[PersistenceException: Error al obtener la secuencia 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; 
} 

esta es mi clase.

este es el error mientras trato de guardar el modelo en db.

enter image description here

apreciaré cualquier esfuerzo por ayudar! muchas gracias.

EDIT: estructura de la tabla es aquí enter image description here

+0

Por favor, muestre la estructura de su tabla (archivo sql que crea tablas). Y cuéntanos en qué db estás trabajando, porque, si está en MySQL, no admite secuencias. –

+0

Agregué la estructura de mi tabla, vea la actualización – doniyor

+0

¿usó ebean para generar sus tablas? –

Respuesta

10

Creo que con Ebean hay que nombrar físicamente y anotar su identificación. Es posible que también deba indicarle el nombre del secuenciador de acompañamiento (no lo recuerdo). This muestra cómo hacerlo.

+0

John, muchas gracias. ese era el punto. ¡Gran Stackoverflower! ;) – doniyor

+0

Esta solución también funcionó para mí (Play 2.0.4). La clave era agregar esta anotación a mi modelo de Usuario: '@GeneratedValue (strategy = GenerationType.SEQUENCE, generator =" users_id_seq ")'. No sé si Play no identifica la secuencia correctamente o qué, pero funciona ahora. Frustrante. – duma

+0

También tuve que definir la secuencia, de lo contrario Hibernate me diría que no sabe acerca de users_id_seq: '@SequenceGenerator (name =" seq_gen_name ", sequenceName =" task_seq ") @GeneratedValue (strategy = GenerationType.SEQUENCE, generator =" seq_gen_name ") @Id public Long id;' – Adrien

2

Esto funcionó para mí:

@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; 
} 

Cuando se utiliza el SequenceGenerator, importa por favor este error en Hibernate: https://hibernate.atlassian.net/browse/HHH-7232

Te obliga a escribir el esquema directamente en el sequenceName lugar de utilizar el campo de esquema en la anotación SequenceGenerator.

1

Esto funcionó para mí en la clase de anotación:

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

Como dijo Leo, esta estrategia funciona para la anotación en el campo y también en la clase.

Cuestiones relacionadas