From 574192d08be569e1a6917b2a92280bff250ac4c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz>
Date: Mon, 12 Apr 2021 15:52:18 +0200
Subject: [PATCH] Solution

---
 src/main/java/koz01/java2/lab10/Clas.java          |  6 +++---
 src/main/java/koz01/java2/lab10/Department.java    |  6 ++++--
 src/main/java/koz01/java2/lab10/Employee.java      |  4 ++--
 .../java/koz01/java2/lab10/NonTeachingStaff.java   |  2 ++
 src/main/java/koz01/java2/lab10/Staff.java         |  3 +++
 src/main/java/koz01/java2/lab10/Teacher.java       |  6 +++---
 src/main/java/koz01/java2/lab10/TeachingStaff.java |  2 ++
 src/test/java/koz01/java2/lab10/DemoJPA.java       | 14 ++++++++++++++
 8 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/src/main/java/koz01/java2/lab10/Clas.java b/src/main/java/koz01/java2/lab10/Clas.java
index bd20f7d..5de9356 100644
--- a/src/main/java/koz01/java2/lab10/Clas.java
+++ b/src/main/java/koz01/java2/lab10/Clas.java
@@ -3,7 +3,7 @@ package koz01.java2.lab10;
 import java.util.Set;
 
 import javax.persistence.Entity;
-import javax.persistence.Transient;
+import javax.persistence.ManyToMany;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -19,8 +19,8 @@ public class Clas extends BaseEntity {
 	@Setter
 	private String cname;
 
-	@Transient
+	@ManyToMany(targetEntity = Teacher.class, mappedBy = "clas")
 	@Getter
 	@Setter
-	private Set<Clas> clas;
+	private Set<Teacher> teacher;
 }
diff --git a/src/main/java/koz01/java2/lab10/Department.java b/src/main/java/koz01/java2/lab10/Department.java
index 8b09f00..cbe6404 100644
--- a/src/main/java/koz01/java2/lab10/Department.java
+++ b/src/main/java/koz01/java2/lab10/Department.java
@@ -2,8 +2,9 @@ package koz01.java2.lab10;
 
 import java.util.List;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Entity;
-import javax.persistence.Transient;
+import javax.persistence.OneToMany;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -19,7 +20,8 @@ public class Department extends BaseEntity {
 	@Setter
 	private String name;
 
-	@Transient
+	@OneToMany(targetEntity = Employee.class, mappedBy = "department",
+		cascade = CascadeType.PERSIST)
 	@Getter
 	@Setter
 	private List<Employee> employee;
diff --git a/src/main/java/koz01/java2/lab10/Employee.java b/src/main/java/koz01/java2/lab10/Employee.java
index f21bdc1..9ea9541 100644
--- a/src/main/java/koz01/java2/lab10/Employee.java
+++ b/src/main/java/koz01/java2/lab10/Employee.java
@@ -1,7 +1,7 @@
 package koz01.java2.lab10;
 
 import javax.persistence.Entity;
-import javax.persistence.Transient;
+import javax.persistence.ManyToOne;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -29,7 +29,7 @@ public class Employee extends BaseEntity {
 	@Setter
 	private String deg;
 
-	@Transient
+	@ManyToOne
 	@Setter
 	@Getter
 	private Department department;
diff --git a/src/main/java/koz01/java2/lab10/NonTeachingStaff.java b/src/main/java/koz01/java2/lab10/NonTeachingStaff.java
index 59b164a..7389f1a 100644
--- a/src/main/java/koz01/java2/lab10/NonTeachingStaff.java
+++ b/src/main/java/koz01/java2/lab10/NonTeachingStaff.java
@@ -1,6 +1,7 @@
 package koz01.java2.lab10;
 
 import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -8,6 +9,7 @@ import lombok.Setter;
 
 @Entity
 @NoArgsConstructor
+@PrimaryKeyJoinColumn(referencedColumnName = "id")
 public class NonTeachingStaff extends Staff {
 
 	@Getter
diff --git a/src/main/java/koz01/java2/lab10/Staff.java b/src/main/java/koz01/java2/lab10/Staff.java
index 6f09a62..87e3728 100644
--- a/src/main/java/koz01/java2/lab10/Staff.java
+++ b/src/main/java/koz01/java2/lab10/Staff.java
@@ -1,12 +1,15 @@
 package koz01.java2.lab10;
 
 import javax.persistence.Entity;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 @Entity
+@Inheritance(strategy = InheritanceType.JOINED)
 @NoArgsConstructor
 public class Staff extends BaseEntity {
 
diff --git a/src/main/java/koz01/java2/lab10/Teacher.java b/src/main/java/koz01/java2/lab10/Teacher.java
index 1c67bac..811cbd7 100644
--- a/src/main/java/koz01/java2/lab10/Teacher.java
+++ b/src/main/java/koz01/java2/lab10/Teacher.java
@@ -4,7 +4,7 @@ package koz01.java2.lab10;
 import java.util.Set;
 
 import javax.persistence.Entity;
-import javax.persistence.Transient;
+import javax.persistence.ManyToMany;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -24,8 +24,8 @@ public class Teacher extends BaseEntity {
 	@Setter
 	private String subject;
 
-	@Transient
+	@ManyToMany(targetEntity = Clas.class)
 	@Getter
 	@Setter
-	private Set<Clas> clasSet;
+	private Set<Clas> clas;
 }
diff --git a/src/main/java/koz01/java2/lab10/TeachingStaff.java b/src/main/java/koz01/java2/lab10/TeachingStaff.java
index 7900ce4..a7af2b2 100644
--- a/src/main/java/koz01/java2/lab10/TeachingStaff.java
+++ b/src/main/java/koz01/java2/lab10/TeachingStaff.java
@@ -1,12 +1,14 @@
 package koz01.java2.lab10;
 
 import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 @Entity
+@PrimaryKeyJoinColumn(referencedColumnName = "id")
 @NoArgsConstructor
 public class TeachingStaff extends Staff {
 
diff --git a/src/test/java/koz01/java2/lab10/DemoJPA.java b/src/test/java/koz01/java2/lab10/DemoJPA.java
index d859bdd..e5fd60a 100644
--- a/src/test/java/koz01/java2/lab10/DemoJPA.java
+++ b/src/test/java/koz01/java2/lab10/DemoJPA.java
@@ -3,6 +3,7 @@ package koz01.java2.lab10;
 
 import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -12,6 +13,9 @@ import javax.persistence.Persistence;
 
 import org.junit.jupiter.api.Test;
 
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
 public class DemoJPA {
 
 	@Test
@@ -83,6 +87,16 @@ public class DemoJPA {
 		entitymanager.getTransaction().commit();
 		entitymanager.close();
 		emfactory.close();
+
+		emfactory = Persistence.createEntityManagerFactory("lab10");
+		entitymanager = emfactory.createEntityManager();
+		Iterator<?> result = entitymanager.createQuery("select d from Department d")
+			.getResultList().iterator();
+		while (result.hasNext()) {
+			Department d = (Department) result.next();
+
+			log.info("d.employee {}", d.getEmployee());
+		}
 	}
 
 	@Test
-- 
GitLab