Onetoone, Onetomany, Manytoone Y Manytomany 1. Introducción
Onetoone, Onetomany, Manytoone Y Manytomany 1. Introducción
Onetoone, Onetomany, Manytoone Y Manytomany 1. Introducción
ManyToMany
1. Introducción
Java Persistence API, más conocida por sus siglas JPA, es la API de
persistencia desarrollada para la plataforma Java EE . La cual es un
framework del lenguaje de programación Java, que maneja datos
relacionales en aplicaciones usando la plataforma Java en sus ediciones
Standard (Java SE) y Enterprise (Java EE) .
Una buena práctica es usar cascade en la entidad padre ya que nos permite
propagar los cambios y aplicarlos a los hijos. En nuestro ejemplo, tuition no
tiene sentido que exista si student no existe, por lo que student es el que
tendrá el rol padre.
1 @Entity
2 @Table(name = "tuition")
3 public class Tuition {
4
5 @Id
6 @GeneratedValue(strategy = GenerationType.IDENTITY)
7 private Long id;
8
9 private Double fee;
10
11 // Que columna en la tabla Tuition tiene la FK
12 @JoinColumn(name = "student_id")
13 @OneToOne(fetch = FetchType.LAZY)
14 private Student student;
15
16 /* Getters and setters */
17}
Vamos a crear un test muy simple para comprobar la sentencia sql que se
está ejecutando.
1 @Test
2 @Transactional
3 @Rollback(false)
4 public void check_sql_statement_when_persisting_in_one_to_one_bidirectional() {
5
6 Student student = new Student();
7 student.setName("Jonathan");
8
9 Tuition tuition = new Tuition();
10 tuition.setFee(150);
11 tuition.setStudent(student);
12
13 student.setTuition(tuition);
14
15 entityManager.persist(student);
16 }
1 @Entity
2 @Table(name = "tuition")
3 public class Tuition {
4
5 @Id
6 private Long id;
7
8 private Double fee;
9
10 @MapsId
11 @OneToOne(fetch = FetchType.LAZY)
12 private Student student;
13
14 /* Getters and setters */
15}
1 @Entity
2 @Table(name = "students")
3 public class Student {
4
5 @Id
6 @GeneratedValue(strategy = GenerationType.IDENTITY)
7 private Long id;
8
9 private String name;
10
11 @ManyToOne()
12 @JoinColumn(name = "university_id")
13 private University university;
14
15 /* Getters and setters */
16}
1 @Test
2 @Transactional
3 @Rollback(false)
4 public void check_sql_statement_when_persisting_in_one_to_many_unidirectional() {
5 University university = new University();
6 university.setName("Universidad de Las Palmas de Gran Canaria");
7
8 Student student1 = new Student();
9 student1.setName("Ana");
10
11 Student student2 = new Student();
12 student2.setName("Jonathan");
13
14 university.setStudents(List.of(student1, student2));
15
16 entityManager.persist(university);
17 }
¿Por qué se ejecutan los Update?
1 @Entity
2 @Table(name="course")
3 public class Course {
4
5 @Id
6 @GeneratedValue(strategy = GenerationType.IDENTITY)
7 private Long id;
8
9 private String name;
10
11 private Double fee;
12
13 @ManyToMany(mappedBy = "courses")
14 private Set<Student> students;
15
16 /* Getters and setters */
17}
1 @Entity
2 @Table(name="student")
3 public class Student {
4
5 @Id
6 @GeneratedValue(strategy = GenerationType.IDENTITY)
7 private Long id;
8
9 private String name;
10
11 @ManyToMany(cascade = {
12 CascadeType.PERSIST,
13 CascadeType.MERGE
14 })
15 @JoinTable(
16 name = "student_course",
17 joinColumns = {@JoinColumn(name = "student_id")},
18 inverseJoinColumns = {@JoinColumn(name = "course_id")}
19 )
20 private Set<Course> courses;
21
22 /* Getters and setters */
23}