JPA y los numéricos autoincrementales de Oracle

Versión para imprimirVersión PDF

Acerca de la creación de campos numéricos autoincrementales en Oracle hemos visto anteriormente diferentes opciones a través del manejo de secuencias y triggers. Ahora veremos como integrar esta solución con anotaciones JPA para definir nuestros objetos entidad.

Nuestra modelo de datos se define de la siguiente manera.

CREATE TABLE USER (
  ID NUMBER(10) NOT NULL,
  NAME VARCHAR2(30)  NOT NULL,
  LAST_NAME VARCHAR2(60)  NOT NULL,
  NICK VARCHAR2(8)  NOT NULL,
  PASSWORD VARCHAR2(8)  NOT NULL,
  CONSTRAINT PK_USER PRIMARY KEY (id)
);

CREATE SEQUENCE SQ_USER_01
  MINVALUE 1
  START WITH 1
  INCREMENT BY 1
  NOCACHE;

La clase que utilizaremos para mapear esta tabla al mundo de los objetos es la siguiente.

@Entity
@Table(name = "USER")
@SequenceGenerator(name = "userIdSequence", sequenceName = "SQ_USER_01")
public class User implements Serializable {
  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue(generator = "userIdSequence")
  @Basic(optional = false)
  @Column(name = "ID")
  private Long idUser;
  @Basic(optional = false)
  @Column(name = "NAME")
  @NotNull
  @Size(min = 1, max = 30)
  private String name;
  @Column(name = "LAST_NAME")
  @Null
  @Size(min = 1, max = 60)
  private String lastName;
  @Column(name = "NICK")
  @Null
  @Size(min = 1, max = 8)
  private String nick;
  @Column(name = "PASSWORD")
  @Null
  @Size(min = 1, max = 8)
  private String password;
  
  /** setters y getters */
  ...

Las anotaciones que se encargan de hacer que la integración funcione son @GeneratedValue y @SequenceGenerator.

@GeneratedValue
Es utilizada en conjunto con la anotación @Id y describe a la llave primaria de la tabla, en este caso se le pasa el parámetro "generator" para especificar el npmbre del generador de valores para la llave primaria. Este nombre se corresponde con el que se pasará a @SequenceGenerator en "name".

@SequenceGenerator
Es utilizada pra definir el componente que genera la secuencia a utilizar para generar el valor de la llave primaria. Se le debe especificar el nombre, que debe coincidir con el "generator" especificado en @GeneratedValue y el nombre de la secuencia que es el nombre de la secuencia de Oracle.

De esta manera ya se puede invocar la persistencia del objeto si tener que especificar el ID.

  User user = new User();
  user.setName("Luis");
  user.setLastName("Garcia");
  user.setNick("luigix");
  user.setPassword("123456");
  
  /** obtener sesion de hibernate */
  ...
  sessionFactory.getCurrentSession().save(user);

Your rating: None Average: 5 (2 votes)