CodeGym /Cursos Java /Módulo 4. Working with databases /Mapeo de clases en Hibernate

Mapeo de clases en Hibernate

Módulo 4. Working with databases
Nivel 9 , Lección 1
Disponible

2.1 Anotación @Entidad, @Tabla

Si desea asignar su clase a una tabla en la base de datos, entonces necesita agregarle hasta 3 anotaciones.

Primero, debe agregar una anotación a la clase @Entity. Esta anotación delante de la clase le dirá a Hibernate que no es solo una clase, sino una clase especial cuyos objetos deben almacenarse en la base de datos.

Ejemplo:

@Entity
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Esto es suficiente para que Hibernate trate los objetos de esta clase de manera especial.

La segunda anotación es @Table. Con su ayuda, puede establecer el nombre de la tabla en la base de datos con la que se asociará esta clase. Ejemplo:

@Entity
@Table(name="user")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Si el nombre de la clase y el nombre de la tabla son iguales, se @Tablepuede omitir la anotación.

Además, si su aplicación funciona con tablas de varios esquemas al mismo tiempo, debe especificar en qué esquema en particular se encuentra la tabla:

@Entity
@Table(name="user", schema="test")
class User {
    public int id;
    public String name;
    public int level;
    public Date createdDate;
}

Sí, todo es tan simple como parece.

2.2 Anotación @Column

La segunda cosa importante que debe saber es la asignación de columnas de tabla a campos de clase. En la versión más simple, Hibernate simplemente asignará los campos de su clase de entidad a las columnas de la tabla deseada.

Si desea controlar todos los matices del mapeo, puede usar la anotación @Column. Ejemplo:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

La anotación @Columntiene varios parámetros, a continuación consideraremos los más populares:

# Nombre del Atributo Tipo de atributo Descripción
1 nombre Cadena Establece el nombre de la columna de la tabla para el campo de clase.
2 único booleano Todos los valores de campo deben ser únicos
3 anulable booleano El campo puede ser nulo
4 longitud En t Longitud máxima (para cadenas)

Agreguemos algunas restricciones a los campos de nuestra clase de entidad de usuario:

  • el nombre de usuario debe ser único y no más de 100 caracteres
  • el nivel puede ser nulo
  • createdDate no puede ser nulo

Entonces nuestras anotaciones se convierten en:

@Entity
@Table(name="user")
class User {
   @Column(name="id")
    public Integer id;

   @Column(name="name", unique=true, length=100)
   public String name;

   @Column(name="level", nullable=true)
   public Integer level;

   @Column(name="created_date", nullable=false)
   public Date createdDate;
}

Puede crear un objeto de tipo Usuario e incluso asignarle todos los campos nulos ; sin embargo, cuando intente guardarlo en la base de datos, Hibernate realizará una verificación y, si se viola alguna restricción, se generará una excepción.

2.3 Anotación @Id

Y una anotación más importante es @Id. Se puede utilizar para establecer la clave principal de una tabla.

Solo necesita especificar esta anotación para el campo deseado, e Hibernate hará todo por sí mismo:

@Entity
@Table(name="user")
class User {
   @Id
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Si desea que Hibernate genere de forma independiente los ID de sus objetos al agregarlos a la base de datos, debe agregar una anotación más: @GeneratedValue. Entonces nuestro ejemplo se vería así:

@Entity
@Table(name="user")
class User {
   @Id
   @GeneratedValue
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="level")
   public Integer level;

   @Column(name="created_date")
   public Date createdDate;
}

Omitimos la anotación @Columnpara el campo id aquí, ya que no contiene información valiosa: el nombre del campo y el nombre de la columna en la tabla son los mismos, y gracias al resto de las anotaciones, Hibernate ya entiende que estamos hablando de una tabla. columna.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION