miércoles, 13 de mayo de 2015

Using @GeneratedValue with Firebird and JPA (EclipseLink)

If you need to manage generated values in a Java application that uses JPA (Java Persistence API) and FirebirdSQL as database you can use @GeneratedValue annotation according to EclipseLink.

All you need to do is follow these steps:

1. Create your FIREBIRD generator

-- create your generator
CREATE GENERATOR GEN_ORDER;
SET GENERATOR GEN_ORDER TO 0;

If you are using FirebirdSQL 2.0 you can use CREATE SEQUENCE http://www.firebirdsql.org/refdocs/langrefupd20-create-seq.html

-- For Firebird 2.x
CREATE SEQUENCE GEN_ORDER;
ALTER SEQUENCE GEN_ORDER RESTART WITH 0;



2.Use @SequenceGenerator and   @GeneratedValue in your Entity class

  • Specify a name for your Sequence
     @SequenceGenerator( name = "YOUR_SEQUENCE_NAME", sequenceName = "YOUR_GENERATOR", allocationSize = 1 )
  • Use GeneratedValue and assign previous name to generator property
 @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "YOUR_SEQUENCE_NAME" )   
 
For example to use Firebird generator defined in Step 1 use this lines:

    @SequenceGenerator( name = "ORDER_SEQUENCE", sequenceName = "GEN_ORDER", allocationSize = 1 ) 
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "ORDER_SEQUENCE" )     


Finally your java class looks like this:






I hope this can help you.

1 comentario:

  1. I have this error..

    GRAVE: EjbTransactionUtil.handleSystemException: A validation constraint failure occurred for class "mx.usm_soft.imss.domain.Unidad".
    javax.validation.ConstraintViolationException: A validation constraint failure occurred for class "mx.usm_soft.imss.domain.Unidad".

    If I add a number as ID, I can save without problems... but if I try use a generator I get the error.

    ResponderEliminar