Saltar al contenido

¿Para qué sirven las anotaciones @Id y @GeneratedValue(strategy = GenerationType.IDENTITY)? ¿Por qué el tipo de generación es la identidad?

Esta pregunta se puede abordar de diversas formas, pero te mostramos la respuesta más completa para nosotros.

Solución:

Déjame responder a esta pregunta:
En primer lugar, usar anotaciones como nuestro método de configuración es solo un método conveniente en lugar de hacer frente al interminable archivo de configuración XML.

Él @Idla anotación se hereda de javax.persistence.Idindicando que el campo de miembro a continuación es el principal key de entidad actual. De ahí su marco Hibernate y Spring, así como también puede hacer algunos reflect funciona en base a esta anotación. para más detalles, consulte javadoc para Id.

Él @GeneratedValue La anotación es configurar la forma de incremento de la columna (campo) especificada. Por ejemplo cuando se usa Mysqlpuede especificar auto_increment en la definición de la tabla para que sea autoincremental, y luego use

@GeneratedValue(strategy = GenerationType.IDENTITY)

en el código Java para indicar que también reconoció usar esta estrategia del lado del servidor de la base de datos. Además, puede cambiar el valor de esta anotación para adaptarse a diferentes requisitos.

1. Definir secuencia en la base de datos

Por ejemplo, Oracle tiene que usar sequence como método de incremento, digamos que creamos una secuencia en Oracle:

create sequence oracle_seq;

2. Consulte la secuencia de la base de datos

Ahora que tenemos la secuencia en la base de datos, pero necesitamos establecer la relación entre Java y DB, usando @SequenceGenerator:

@SequenceGenerator(name="seq",sequenceName="oracle_seq")

sequenceName es el nombre real de una secuencia en Oracle, name es como quieres llamarlo en Java. necesitas especificar sequenceName si es diferente de namede lo contrario solo usa name. normalmente ignoro sequenceName para ahorrar mi tiempo.

3. Usar secuencia en Java

Finalmente, es hora de hacer uso de esta secuencia en Java. Solo agrega @GeneratedValue:

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")

Él generator El campo se refiere al generador de secuencias que desea utilizar. Tenga en cuenta que no es el nombre de secuencia real en DB, sino el nombre que especificó en name campo de SequenceGenerator.

4. Completa

Así que la versión completa debería ser así:

public class MyTable

    @Id
    @SequenceGenerator(name="seq",sequenceName="oracle_seq")        
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")               
    private Integer pid;

Ahora comience a usar estas anotaciones para facilitar su desarrollo de JavaWeb.

En un contexto de mapeo relacional de objetos, cada objeto debe tener un identificador único. usas el @Id anotación para especificar el principal key de una entidad.

Él @GeneratedValue La anotación se utiliza para especificar cómo key debe generarse. En tu ejemplo estás usando un Identity estrategia que

Indica que el proveedor de persistencia debe asignar principal keys para la entidad utilizando una columna de identidad de la base de datos.

Hay otras estrategias, puedes ver más aquí.

Simply, @Id: This annotation specifies the primary key of the entity. 

@GeneratedValue: This annotation is used to specify the primary key generation strategy to use. i.e Instructs database to generate a value for this field automatically. If the strategy is not specified by default AUTO will be used. 

GenerationType enum defines four strategies: 
1. Generation Type . TABLE, 
2. Generation Type. SEQUENCE,
3. Generation Type. IDENTITY   
4. Generation Type. AUTO

GenerationType.SEQUENCE

With this strategy, underlying persistence provider must use a database sequence to get the next unique primary key for the entities. 

GenerationType.TABLE

With this strategy, underlying persistence provider must use a database table to generate/keep the next unique primary key for the entities. 

GenerationType.IDENTITY
This GenerationType indicates that the persistence provider must assign primary keys for the entity using a database identity column. IDENTITY column is typically used in SQL Server. This special type column is populated internally by the table itself without using a separate sequence. If underlying database doesn't support IDENTITY column or some similar variant then the persistence provider can choose an alternative appropriate strategy. In this examples we are using H2 database which doesn't support IDENTITY column.

GenerationType.AUTO
This GenerationType indicates that the persistence provider should automatically pick an appropriate strategy for the particular database. This is the default GenerationType, i.e. if we just use @GeneratedValue annotation then this value of GenerationType will be used. 

Referencia:- https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/jpa-primary-key.html

valoraciones y comentarios

Nos encantaría que puedieras difundir esta noticia si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *