Anotaciones en JPA para sobrevivir a una primera persistenica

 

En este apartado, voy a dar por hecho.

  1. Sabéis qué es persistencia
  2. Sabéis qué son las anotaciones
  3. Sabéis qué es JPA
  4. Tenéis paciencia conmigo.

En la persistencia se crean entidades (ejemplo entidad «Usuario») y cada entidad tiene sus atributos o propiedades que están enlazados por arte de magia de la persistencia en la base de datos (ejemplo private Integer usuario_id).

Las anotaciones o announces permiten definir la persistencia de forma fácil, bonita y barata.

Estas son las anotaciones que he destacado para sobrevivir en este mundo:

@Entity Especifica que voy a crear una entidad. Se coloca al inicio de la definición de la clase.

@Entity
@Table(name=»users»)
public class User implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name=»user_id», nullable=false)
private Integer userId = null;

 

@Id Primary key de la entidad.

 

@Entity
@Table(name=»users»)
public class User implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name=»user_id», nullable=false)
private Integer userId = null;


@GeneratedValue  Indica que esa clave se auto genera por medio de auto increment


@Colulmn
Sirve para especificar que la clave está asociada a un atributo de la tabla. Aprovecharemos para indicar si  puede ser nulo, si existe un límite de caracteres, etc.

@Column (name=»code», nullable=false, length=50, unique=true)
private String code = null;


@Temporal
Se usa normalmente en fechas.

Si definimos un elemento de tipo Date, deberemos indicarle en temporal que el tipo es timestamp..

@Column(name=»modification_date»)
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate = null;

o de tipo date si no queremos obtener la hora

   @Column (name=»analysis_date»)
@Temporal(TemporalType.DATE)
private Date analysisDate = null;

@OneToMany.  Indicar una relación unidireccional de muchos a uno.

Ejemplo User N – N Roles

Entity user

@OneToMany(cascade = CascadeType.ALL, mappedBy = «user»)
private List<UserRole> userRoles = null;

Entity users_roles

JoinColumn(name = «user_id», referencedColumnName = «user_id», insertable=false, updatable=false)
@ManyToOne(optional = false)
private User user = null;

Con mappedBy estamos indicando quién es el dueño de la relación. En este caso…. está claro, no? ¿Dónde quiero tener guardado los roles del usuario? Tiene sentido que se guarden en el usuario por si se quieren obtener desde esa misma entidad.

@JoinColumn Indicamos la tabla con la que queremos hacer relación. Ver los ejemplos anteriores.

 

@ManyToOne Podemos indicar  desde users_rols que una relación de esta entidad tiene muchas entidades de usuarios y muchas entidades de roles. En este caso utilizaremos:

@JoinColumn(name = «user_id», referencedColumnName = «user_id», insertable=false, updatable=false)
@ManyToOne(optional = false)
private User user = null;

@JoinColumn(name = «role_id», referencedColumnName = «role_id», insertable=false, updatable=false)
@ManyToOne(optional = false)
private Role role = null;

 

Para que quede claro el ejemplo: 1 usuario – n roles necesitaremos hacer

  1. Definir el listado de roles dentro de «user» e indicar la relación OneToMany
  2. En «users_roles» indicar la relación ManyToOne con respecto a usuarios y ManyToOne a roles
  3. En «rol» indicar… nada! no se entera de nada!

 

@ManyToMany y @OneToOne 

OneToOne podría utilizarse para indicar que un usuario tiene una dirección dentro.

ManyToMany… recomiendo no utilizarlo.

 

Muchas gracias!! se agradece puntualizar cualquier error cometido! a parte claro está de mis lacarrismos.

 

 

 

 

 

 

Anuncio publicitario

5 comentarios en “Anotaciones en JPA para sobrevivir a una primera persistenica

  1. Te hago una pequeña corrección. Pusiste «@OneToMany. Indicar una relación unidireccional de muchos a uno.» y es en realidad «@OneToMany. Indicar una relación unidireccional de uno a muchos.»

    • El @GeneratedValue(strategy=generationType.AUTO) indica que e identificador sera generado por el motor de base de datos, por ende no es necesario incluirlo en tu constructor si tienes Usuario con id_usuario,user,password. entonces solo pasas en tus constructor Usuario(String user,String password)

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.