@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
¿Por qué usamos estas anotaciones? Necesito saber si este autoincremento mis valores de identificación de tabla. (GenerationType.IDENTITY) ¿hay algún otro tipo que esté sucediendo realmente cuando usamos esta anotación?
public class Author extends Domain
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "name")
private String name;
@Column(name = "address")
private String address;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "authorId")
private List<Book>
bookList;
public Author()
{
setServiceClassName("wawo.tutorial.service.admin.AuthorService");
}
}
* ¿Es necesario extender la clase abstracta de dominio ?, ¿para qué sirve?
Respuestas:
Permítanme 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 archivo de configuración XML sin fin.
La
@Id
anotación se hereda dejavax.persistence.Id
, lo que indica que el campo de miembro a continuación es la clave principal de la entidad actual. Por lo tanto, su marco de Hibernate y Spring, así como también puede hacer algunosreflect
trabajos basados en esta anotación. para obtener más información, compruebe javadoc para la identificaciónLa
@GeneratedValue
anotación es para configurar la forma de incremento de la columna (campo) especificada. Por ejemplo, al usarMysql
, puede especificarauto_increment
en la definición de tabla para que sea auto incremental y luego usar@GeneratedValue(strategy = GenerationType.IDENTITY)
en el código Java para indicar que también reconoció utilizar esta estrategia del lado del servidor de base de datos. Además, puede cambiar el valor en 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 quiere llamarlo en Java. Debe especificarsequenceName
si es diferente dename
, de lo contrario, simplemente usename
. Normalmente lo ignorosequenceName
para ahorrar 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")
El
generator
campo se refiere al generador de secuencias que desea utilizar. Observe que no es el nombre de secuencia real en DB, sino el nombre que especificó en elname
campo deSequenceGenerator
.4. Completa
Entonces, 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 JavaWeb.
fuente
En un contexto de asignación relacional de objetos, cada objeto debe tener un identificador único. Utiliza la
@Id
anotación para especificar la clave principal de una entidad.La
@GeneratedValue
anotación se utiliza para especificar cómo se debe generar la clave principal. En su ejemplo, está utilizando unaIdentity
estrategia queHay otras estrategias, puedes ver más aquí .
fuente
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
fuente