Clave primaria

Disponible

anotación @Id

Cada entidad Entity en Hibernate debe tener un campo que será la clave principal: contiene un valor único para todos los objetos de esta clase. Por lo general, este campo se anota con la anotación @Id .

forma general:

@Id
Class Name;

Ejemplo:

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

   @Embedded
   public UserAddress address;

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

Colocación de anotaciones

Por cierto, puede escribir anotaciones @Column no solo para campos, sino también para métodos: para getters o setters. Ejemplo:

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

   @Id
   @Column(name="id")
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   @Column(name="created_date")
   public Date getDate() {
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
      this. createdDate = date;
   }
}

Este enfoque apareció cuando las anotaciones comenzaron a agregarse no solo a las clases, sino también a las interfaces. La interfaz no tiene campos de clase, pero hay métodos: getters y setters. Hibernate es compatible con ambos estándares.

¡Importante! Si una clase tiene la anotación @Entity , Hibernate trata todos sus campos como campos persistentes (a menos que tengan la anotación @Transient especificada ). Incluso si los campos no tienen ninguna anotación: en este caso, el nombre de la columna se considera igual al nombre del campo de la clase.

Aquí es donde la anotación @Id juega un papel importante. Si la anotación se coloca en un campo de clase, Hibernate observará los nombres y tipos de los campos. Si la anotación @Id se coloca en un método, Hibernate observará los nombres y tipos de los métodos.

Ejemplo 1:

@Entity
@Table(name="user")
class User
{
   @Id
    public Integer id;
    public Date createdDate;  //this field will be treated as if it had @Column(name=" createdDate ")

}

Ejemplo 2:

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

   @Id
   public Integer getId() {
   	return this.id;
   }
   public void setId(Integer id)    {
  	this.id = id;
   }

   public Date getDate() { //this field will be treated as if it had @Column(name=”date ”)
  	return this.createdDate;
   }
   public void setCreatedDate(Date date) {
  	this. createdDate = date;
   }

}

Anotación @GeneratedValue

Puede asignar una identificación a sus nuevos objetos usted mismo o dejarla a merced de Hibernate. Para que Hibernate comprenda mejor cómo asignar ID a sus objetos, tiene una anotación especial:

@GeneratedValue

Esta anotación suele marcar el mismo campo que la anotación @Id . Ella tiene 4 posibles estrategias de asignación de ID:

  • AUTO
  • IDENTIDAD
  • SECUENCIA
  • MESA

Un ejemplo de una anotación con la estrategia especificada:

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

    public Date createdDate;
}

Si no se especifica ningún valor de política, se seleccionará la estrategia AUTO. La estrategia AUTO significa que Hibernate asignará la ID en sí, basándose principalmente en el tipo de datos del campo ID.

¿Por qué en tipo? Sí, porque los tipos de ID pueden ser muy diferentes, por ejemplo, String o GUID. Ejemplo:

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

    public Date createdDate;
}

Nota: un GUID en Java se denomina UUID, históricamente hablando. E Hibernate puede generar UUID únicos para sus objetos si se lo solicita.

Varias estrategias @GeneratedValue

Si especifica el tipo GeneratedValue(strategy = GenerationType.IDENTITY) , entonces Hibernate delega la configuración de ID a la capa de la base de datos. Por lo general, esto usa una columna etiquetada PRIMARY KEY, AUTOINCREMENT.

Pero si desea que sus ID sean únicos y se generen de acuerdo con un algoritmo especialmente especificado, puede usar la anotación GeneratedValue(strategy = GenerationType.SEQUENCE) , por ejemplo:

@Entity
@Table(name="user")
public class User {
	@Id
	@GeneratedValue(generator = "sequence-generator")
	@GenericGenerator(
  	name = "sequence-generator",
  	strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
  	parameters = {
    	@Parameter(name = "sequence_name", value = "user_sequence"),
    	@Parameter(name = "initial_value", value = "4"),
    	@Parameter(name = "increment_size", value = "1")
    	}
	)
	private long userId;

	// ...
}

Hay muchas más formas de generar una identificación. Por ejemplo, puede tener una clave única compuesta que consta de varias columnas. Y al escribir un objeto en la base de datos, debe completar todas estas columnas.

No los daré en detalle. Aún así, el propósito de nuestras conferencias es familiarizarse con Hibernate y no volver a contar la documentación oficial.

Comentarios
  • Populares
  • Nuevas
  • Antiguas
Debes iniciar sesión para dejar un comentario
Esta página aún no tiene comentarios