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 @Table
puede 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 @Column
tiene 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 @Column
para 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.
GO TO FULL VERSION