Red de conocimiento informático - Aprendizaje de programación - mapeo jpa uno a muchos (unidireccional), ¿cómo actualizar?

mapeo jpa uno a muchos (unidireccional), ¿cómo actualizar?

Hay dos formas de implementar una asociación unidireccional uno a muchos. Una es simplemente usar @OneToMany para identificarlo. De esta manera se mantiene la relación a través de una tabla de terceros. Otro método es usar @OneToMany y @JoinColumn para identificar. Este método consiste en agregar una columna de clave externa en la tabla multipartita (Libro) para guardar la relación.

La primera forma es lograr una asociación unidireccional de uno a muchos a través de una tabla de terceros:

Author.java se muestra a continuación. Debe prestar atención al comentario. private Set books = new HashSet(). Solo usa @OneToMany.

1 paquete com.cndatacom.jpa.entity; 2 ?3 import java.util.HashSet 4 import java; .util.Set; 5? 6 importar javax.persistence.CascadeType; 7 importar javax.persistence.Column; 9 importar javax.persistence.FetchType; 10 importar javax.persistence .GeneratedValue;11 importar javax.persistence.Id;12 importar javax.persistence.OneToMany;13 importar javax.persistence.Table;14 15 16 /**17 ?* ?autor18 ?* @autor Luxh19 ? */20 21 @ Entity22 @Table(name="author")23 public class Autor {24 25 @Id26 @GeneratedValue27 private Long id;28 29 /** Nombre del autor*/30 @Column(length=32) 31 private String name;32 33 / ** libros escritos por el autor**/34 @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)// guardar en cascada, actualizar, eliminar, actualizar carga retrasada 35 libros privados Set<.book>; = nuevo HashSet();36 37 38 39 public Long getId() {40 return id;41 }42 43 44 public void setId(Long id) {45 this.id = id;46 }47 48 49 public String getName() {50 devolver nombre;51 }52 53 54 public void setName(String nombre) {55 this.name = nombre;56 }57 58 59 public Set books) {65 this.books = books;66 }67 68 69 70 71 }

Book.java tiene el siguiente aspecto, porque es una asociación unidireccional, por lo que la entidad no necesita agregar ningún identificador de asociación.

1 paquete com.cndatacom.jpa.entity; 2?3 importar javax.persistence.Column; 4 importar javax.persistence..GeneratedValue; 6 importar javax.persistence.Id; Tabla; 8 ?9 /**10 ?* Libro11 ?* @author Luxh12 ?*/13 14 @Entity15 @Table(name="book")16 public class Libro {17 18 @Id19 @GeneratedValue20 private Long id;21 22 22 /** Nombre del libro**/23 @Column(length=32)24 private String name;25 26 public Long getId() {27 return id;28 }29 30 public void setId(Long id) {31 this.id = id;32 }33 34 public String getName() {35 return nombre;36 }37 38 public void setName(String nombre) {39 this.name = nombre;40 }41 42 43 }

Solo en la entidad Autor para libros privados Set = new HashSet() con la anotación @OneToMany para implementar una asociación unidireccional. Esta asociación se implementa a través de una tabla de asociación. La tabla de base de datos generada es la siguiente. El nombre de la tabla de Autor y el guión bajo y el nombre de la tabla de Libro se generan en la tabla autor_libro para guardar la asignación unidireccional uno a muchos de Autor y Libro.

En la tabla autor_libro, se almacenan el id de Auhtor y el id de Libro:

El segundo método para implementar una asociación unidireccional uno a muchos es agregar el tabla de fiestas (Libro) Columna de clave externa.

Author.java es el siguiente, tenga en cuenta el comentario private Set books = new HashSet().

1 paquete com.cndatacom.jpa.entity; 2?3 importar java.util.HashSet; 4 importar java.util.Set; 5?6 importar javax .persistence.CascadeType; .CascadeType; 8 importar javax.persistence.HashSet; 9 importar javax.persistence.FetchType; 10 importar javax.persistence.GeneratedValue; javax.persistence.Id;12 import javax.persistence.JoinColumn;13 import javax.persistence.HashSet;14 ?.OneToMany;14 import javax.persistence.Table;15 16 17 /**18 ?* ?Author 19 ?* @ autor Luxh20 ?*/21 22 22 @Entity23 @Table(name="author")24 public class Autor {25 26 @Id27 @GeneratedValue28 private Long id;29 30 /** Nombre del autor */31 @Column(length=32 ) 32 private String name;33 34 /** Libros escritos por el autor**/35 @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//guardar en cascada, actualizar, eliminar, actualizar carga retrasada 36 @ JoinColumn; (name = "author_id")// Agregue una columna de clave externa a la tabla de libros para lograr una asociación unidireccional de uno a muchos 37 private Set books = new HashSet();38 39 40 41 public Long getId () {42 ID de retorno;43 }44 45 46 public void setId(ID largo) {47 this.id = id;48 }49 50 51 public String getName() {52 nombre de retorno;53 }54 55 56 public void setName (nombre de cadena) {57 this.name = nombre;58 }59 60 61 public Set getBooks() {62 devolver libros;63 }64 65 66 public void setBooks(Set libros) {67 this .books = books;68 }69 70 71 72 73 }

Book.java permanece sin cambios.

En la base de datos sólo se generan dos tablas: autor y libros.

Mirando nuevamente la estructura de la tabla de libros, habrá una columna adicional de Author_id.