java - manytoone - secuencias en jpa
¿Cuál es el uso de las anotaciones @Id y @GeneratedValue(strategy=GenerationType.IDENTITY)? ¿Por qué el tipo de generación es identidad? (2)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
¿Por qué estamos usando estas anotaciones? Necesito saber si este autoincremento mi ID de tabla valora. (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 del dominio? ¿Cuál es el uso?
Déjame responder 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 anotación @Id
se hereda de javax.persistence.Id
, lo que indica que el campo miembro a continuación es la clave principal de la entidad actual. Por lo tanto, su marco Hibernate y Spring así como también puede reflect
algunas obras basadas en esta anotación. para más detalles, consulte javadoc para Id
La anotación @GeneratedValue
es para configurar el modo de incremento de la columna especificada (campo). Por ejemplo, al usar Mysql
, puede especificar auto_increment
en la definición de tabla para hacerlo auto_increment
, y luego usar
@GeneratedValue(strategy = GenerationType.IDENTITY)
en el código de Java para indicar que también reconoció utilizar esta estrategia del lado del servidor de la 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 la 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 lo que quiere llamar en Java. Debe especificar sequenceName
si es diferente del name
; de lo contrario, solo use name
. Por lo general, ignoro sequenceName
para ahorrar mi tiempo.
3. Usa secuencia en Java
Finalmente, es hora de usar esta secuencia en Java. Solo agrega @SequenceGenerator :
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
El campo generator
refiere a qué generador de secuencia desea usar. Observe que no es el nombre de secuencia real en DB, sino el nombre que especificó en el campo de name
de SequenceGenerator
.
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 el desarrollo de su JavaWeb.
En un contexto de Asignación relacional de objetos, cada objeto debe tener un identificador único. Utiliza la anotación @Id
para especificar la clave principal de una entidad.
La anotación @GeneratedValue
se utiliza para especificar cómo debe generarse la clave principal. En su ejemplo, está utilizando una estrategia de Identity
que
Indica que el proveedor de persistencia debe asignar claves principales para la entidad utilizando una columna de identidad de base de datos.
Hay otras estrategias, puedes ver más here .