From 59f2df1bcc673bdb86f595cefe9af7cd36ff16c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz>
Date: Mon, 12 Apr 2021 14:04:28 +0200
Subject: [PATCH] solution

---
 src/main/java/koz01/java2/lab10/Clas.java     |  11 +-
 .../java/koz01/java2/lab10/Department.java    |   4 +
 src/main/java/koz01/java2/lab10/Employee.java |   8 +-
 .../koz01/java2/lab10/NonTeachingStaff.java   |   2 +
 src/main/java/koz01/java2/lab10/Staff.java    |   4 +-
 src/main/java/koz01/java2/lab10/Teacher.java  |  11 +-
 .../java/koz01/java2/lab10/TeachingStaff.java |   3 +
 src/test/java/koz01/java2/lab10/DemoJPA.java  | 298 +++++++++---------
 8 files changed, 179 insertions(+), 162 deletions(-)

diff --git a/src/main/java/koz01/java2/lab10/Clas.java b/src/main/java/koz01/java2/lab10/Clas.java
index 20993ff..edf245d 100644
--- a/src/main/java/koz01/java2/lab10/Clas.java
+++ b/src/main/java/koz01/java2/lab10/Clas.java
@@ -1,7 +1,5 @@
 package koz01.java2.lab10;
 
-import java.util.Set;
-
 import javax.persistence.Entity;
 
 import lombok.AllArgsConstructor;
@@ -17,8 +15,9 @@ public class Clas extends BaseEntity {
 	@Getter
 	@Setter
 	private String cname;
-
-	@Getter
-	@Setter
-	private Set<Clas> clas;
+	/*
+			@Getter
+			@Setter
+			private Set<Clas> clas;
+	*/
 }
diff --git a/src/main/java/koz01/java2/lab10/Department.java b/src/main/java/koz01/java2/lab10/Department.java
index 132b6ed..7b21b98 100644
--- a/src/main/java/koz01/java2/lab10/Department.java
+++ b/src/main/java/koz01/java2/lab10/Department.java
@@ -1,8 +1,10 @@
+
 package koz01.java2.lab10;
 
 import java.util.List;
 
 import javax.persistence.Entity;
+import javax.persistence.OneToMany;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -18,7 +20,9 @@ public class Department extends BaseEntity {
 	@Setter
 	private String name;
 
+	@OneToMany(targetEntity = Employee.class, mappedBy = "departmentRereference")
 	@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 259c167..720e180 100644
--- a/src/main/java/koz01/java2/lab10/Employee.java
+++ b/src/main/java/koz01/java2/lab10/Employee.java
@@ -1,6 +1,9 @@
+
 package koz01.java2.lab10;
 
 import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -28,8 +31,11 @@ public class Employee extends BaseEntity {
 	@Setter
 	private String deg;
 
+
+	@ManyToOne
+	@JoinColumn(name = "department_id")
 	@Setter
 	@Getter
-	private Department department;
+	private Department departmentRereference;
 
 }
diff --git a/src/main/java/koz01/java2/lab10/NonTeachingStaff.java b/src/main/java/koz01/java2/lab10/NonTeachingStaff.java
index 59b164a..71f5e2f 100644
--- a/src/main/java/koz01/java2/lab10/NonTeachingStaff.java
+++ b/src/main/java/koz01/java2/lab10/NonTeachingStaff.java
@@ -1,5 +1,6 @@
 package koz01.java2.lab10;
 
+import javax.persistence.DiscriminatorValue;
 import javax.persistence.Entity;
 
 import lombok.Getter;
@@ -7,6 +8,7 @@ import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 @Entity
+@DiscriminatorValue(value = "nts")
 @NoArgsConstructor
 public class NonTeachingStaff extends Staff {
 
diff --git a/src/main/java/koz01/java2/lab10/Staff.java b/src/main/java/koz01/java2/lab10/Staff.java
index 6f09a62..fc78ace 100644
--- a/src/main/java/koz01/java2/lab10/Staff.java
+++ b/src/main/java/koz01/java2/lab10/Staff.java
@@ -1,16 +1,18 @@
 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.SINGLE_TABLE)
 @NoArgsConstructor
 public class Staff extends BaseEntity {
 
-
 	@Getter
 	@Setter
 	private String sname;
diff --git a/src/main/java/koz01/java2/lab10/Teacher.java b/src/main/java/koz01/java2/lab10/Teacher.java
index ee1c357..0830244 100644
--- a/src/main/java/koz01/java2/lab10/Teacher.java
+++ b/src/main/java/koz01/java2/lab10/Teacher.java
@@ -1,8 +1,6 @@
 
 package koz01.java2.lab10;
 
-import java.util.Set;
-
 import javax.persistence.Entity;
 
 import lombok.AllArgsConstructor;
@@ -22,8 +20,9 @@ public class Teacher extends BaseEntity {
 	@Getter
 	@Setter
 	private String subject;
-
-	@Getter
-	@Setter
-	private Set<Clas> clasSet;
+	/*
+		@Getter
+		@Setter
+		private Set<Clas> clasSet;
+		*/
 }
diff --git a/src/main/java/koz01/java2/lab10/TeachingStaff.java b/src/main/java/koz01/java2/lab10/TeachingStaff.java
index 7900ce4..04f10e3 100644
--- a/src/main/java/koz01/java2/lab10/TeachingStaff.java
+++ b/src/main/java/koz01/java2/lab10/TeachingStaff.java
@@ -1,12 +1,15 @@
 package koz01.java2.lab10;
 
+import javax.persistence.DiscriminatorValue;
 import javax.persistence.Entity;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+
 @Entity
+@DiscriminatorValue(value = "ts")
 @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..5439ed2 100644
--- a/src/test/java/koz01/java2/lab10/DemoJPA.java
+++ b/src/test/java/koz01/java2/lab10/DemoJPA.java
@@ -2,9 +2,7 @@
 package koz01.java2.lab10;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
@@ -21,6 +19,7 @@ public class DemoJPA {
 		EntityManager entitymanager = emfactory.createEntityManager();
 		entitymanager.getTransaction().begin();
 
+
 		// Teaching staff entity
 		TeachingStaff ts1 = new TeachingStaff("Gopal", "MSc MEd", "Maths");
 		TeachingStaff ts2 = new TeachingStaff("Manisha", "BSc BEd", "English");
@@ -40,152 +39,155 @@ public class DemoJPA {
 		emfactory.close();
 	}
 
-	@Test
-	public void demostrateManyToOne() {
-		EntityManagerFactory emfactory = Persistence.createEntityManagerFactory(
-			"lab10");
-		EntityManager entitymanager = emfactory.createEntityManager();
-		entitymanager.getTransaction().begin();
-
-		// Create Department Entity
-		Department department = new Department();
-		department.setName("Development");
-
-		// Store Department
-		entitymanager.persist(department);
-
-		// Create Employee1 Entity
-		Employee employee1 = new Employee();
-		employee1.setEname("Satish");
-		employee1.setSalary(45000.0);
-		employee1.setDeg("Technical Writer");
-		employee1.setDepartment(department);
-
-		// Create Employee2 Entity
-		Employee employee2 = new Employee();
-		employee2.setEname("Krishna");
-		employee2.setSalary(45000.0);
-		employee2.setDeg("Technical Writer");
-		employee2.setDepartment(department);
-
-		// Create Employee3 Entity
-		Employee employee3 = new Employee();
-		employee3.setEname("Masthanvali");
-		employee3.setSalary(50000.0);
-		employee3.setDeg("Technical Writer");
-		employee3.setDepartment(department);
-
-		// Store Employees
-		entitymanager.persist(employee1);
-		entitymanager.persist(employee2);
-		entitymanager.persist(employee3);
-
-		entitymanager.getTransaction().commit();
-		entitymanager.close();
-		emfactory.close();
-	}
-
-	@Test
-	public void demostrateOneToMany() {
-		EntityManagerFactory emfactory = Persistence.createEntityManagerFactory(
-			"lab10");
-		EntityManager entitymanager = emfactory.createEntityManager();
-		entitymanager.getTransaction().begin();
-
-		// Create Employee1 Entity
-		Employee employee1 = new Employee();
-		employee1.setEname("Satish");
-		employee1.setSalary(45000.0);
-		employee1.setDeg("Technical Writer");
-
-		// Create Employee2 Entity
-		Employee employee2 = new Employee();
-		employee2.setEname("Krishna");
-		employee2.setSalary(45000.0);
-		employee2.setDeg("Technical Writer");
-
-		// Create Employee3 Entity
-		Employee employee3 = new Employee();
-		employee3.setEname("Masthanvali");
-		employee3.setSalary(50000.0);
-		employee3.setDeg("Technical Writer");
-
-		// Store Employee
-		entitymanager.persist(employee1);
-		entitymanager.persist(employee2);
-		entitymanager.persist(employee3);
-
-		// Create Employeelist
-		List<Employee> emplist = new ArrayList<>();
-		emplist.add(employee1);
-		emplist.add(employee2);
-		emplist.add(employee3);
-
-		// Create Department Entity
-		Department department = new Department();
-		department.setName("Development");
-		department.setEmployee(emplist);
-
-		// Store Department
-		entitymanager.persist(department);
-
-		entitymanager.getTransaction().commit();
-		entitymanager.close();
-		emfactory.close();
-	}
-
-	@Test
-	public void demostrateManyToMany() {
-
-		EntityManagerFactory emfactory = Persistence.createEntityManagerFactory(
-			"lab10");
-		EntityManager entitymanager = emfactory.createEntityManager();
-		entitymanager.getTransaction().begin();
-
-		// Create Clas Entity
-		Clas clas1 = new Clas("1st", null);
-		Clas clas2 = new Clas("2nd", null);
-		Clas clas3 = new Clas("3rd", null);
-
-		// Store Clas
-		entitymanager.persist(clas1);
-		entitymanager.persist(clas2);
-		entitymanager.persist(clas3);
-
-		// Create Clas Set1
-		Set<Clas> classSet1 = new HashSet<>();
-		classSet1.add(clas1);
-		classSet1.add(clas2);
-		classSet1.add(clas3);
-
-		// Create Clas Set2
-		Set<Clas> classSet2 = new HashSet<>();
-		classSet2.add(clas3);
-		classSet2.add(clas1);
-		classSet2.add(clas2);
-
-		// Create Clas Set3
-		Set<Clas> classSet3 = new HashSet<>();
-		classSet3.add(clas2);
-		classSet3.add(clas3);
-		classSet3.add(clas1);
-
-		// Create Teacher Entity
-		Teacher teacher1 = new Teacher("Satish", "Java", classSet1);
-		Teacher teacher2 = new Teacher("Krishna", "Adv Java", classSet2);
-		Teacher teacher3 = new Teacher("Masthanvali", "DB2", classSet3);
-
-		// Store Teacher
-		entitymanager.persist(teacher1);
-		entitymanager.persist(teacher2);
-		entitymanager.persist(teacher3);
-
-		entitymanager.getTransaction().commit();
-		entitymanager.close();
-		emfactory.close();
-
-	}
-
+	/*
+			@Test
+			public void demostrateManyToOne() {
+				EntityManagerFactory emfactory = Persistence.createEntityManagerFactory(
+					"lab10");
+				EntityManager entitymanager = emfactory.createEntityManager();
+				entitymanager.getTransaction().begin();
+		
+				// Create Department Entity
+				Department department = new Department();
+				department.setName("Development");
+		
+				// Store Department
+				entitymanager.persist(department);
+		
+				// Create Employee1 Entity
+				Employee employee1 = new Employee();
+				employee1.setEname("Satish");
+				employee1.setSalary(45000.0);
+				employee1.setDeg("Technical Writer");
+				employee1.setDepartment(department);
+		
+				// Create Employee2 Entity
+				Employee employee2 = new Employee();
+				employee2.setEname("Krishna");
+				employee2.setSalary(45000.0);
+				employee2.setDeg("Technical Writer");
+				employee2.setDepartment(department);
+		
+				// Create Employee3 Entity
+				Employee employee3 = new Employee();
+				employee3.setEname("Masthanvali");
+				employee3.setSalary(50000.0);
+				employee3.setDeg("Technical Writer");
+				employee3.setDepartment(department);
+		
+				// Store Employees
+				entitymanager.persist(employee1);
+				entitymanager.persist(employee2);
+				entitymanager.persist(employee3);
+		
+				entitymanager.getTransaction().commit();
+				entitymanager.close();
+				emfactory.close();
+			}
+	
+	*/
+			@Test
+			public void demostrateOneToMany() {
+				EntityManagerFactory emfactory = Persistence.createEntityManagerFactory(
+					"lab10");
+				EntityManager entitymanager = emfactory.createEntityManager();
+				entitymanager.getTransaction().begin();
+		
+				// Create Employee1 Entity
+				Employee employee1 = new Employee();
+				employee1.setEname("Satish");
+				employee1.setSalary(45000.0);
+				employee1.setDeg("Technical Writer");
+		
+				// Create Employee2 Entity
+				Employee employee2 = new Employee();
+				employee2.setEname("Krishna");
+				employee2.setSalary(45000.0);
+				employee2.setDeg("Technical Writer");
+		
+				// Create Employee3 Entity
+				Employee employee3 = new Employee();
+				employee3.setEname("Masthanvali");
+				employee3.setSalary(50000.0);
+				employee3.setDeg("Technical Writer");
+		
+				// Store Employee
+				entitymanager.persist(employee1);
+				entitymanager.persist(employee2);
+				entitymanager.persist(employee3);
+		
+				// Create Employeelist
+				List<Employee> emplist = new ArrayList<>();
+				emplist.add(employee1);
+				emplist.add(employee2);
+				emplist.add(employee3);
+		
+				// Create Department Entity
+				Department department = new Department();
+				department.setName("Development");
+				department.setEmployee(emplist);
+		
+				// Store Department
+				entitymanager.persist(department);
+		
+				entitymanager.getTransaction().commit();
+				entitymanager.close();
+				emfactory.close();
+			}
+
+			/*
+				@Test
+				public void demostrateManyToMany() {
+			
+					EntityManagerFactory emfactory = Persistence.createEntityManagerFactory(
+						"lab10");
+					EntityManager entitymanager = emfactory.createEntityManager();
+					entitymanager.getTransaction().begin();
+			
+					// Create Clas Entity
+					Clas clas1 = new Clas("1st", null);
+					Clas clas2 = new Clas("2nd", null);
+					Clas clas3 = new Clas("3rd", null);
+			
+					// Store Clas
+					entitymanager.persist(clas1);
+					entitymanager.persist(clas2);
+					entitymanager.persist(clas3);
+			
+					// Create Clas Set1
+					Set<Clas> classSet1 = new HashSet<>();
+					classSet1.add(clas1);
+					classSet1.add(clas2);
+					classSet1.add(clas3);
+			
+					// Create Clas Set2
+					Set<Clas> classSet2 = new HashSet<>();
+					classSet2.add(clas3);
+					classSet2.add(clas1);
+					classSet2.add(clas2);
+			
+					// Create Clas Set3
+					Set<Clas> classSet3 = new HashSet<>();
+					classSet3.add(clas2);
+					classSet3.add(clas3);
+					classSet3.add(clas1);
+			
+					// Create Teacher Entity
+					Teacher teacher1 = new Teacher("Satish", "Java", classSet1);
+					Teacher teacher2 = new Teacher("Krishna", "Adv Java", classSet2);
+					Teacher teacher3 = new Teacher("Masthanvali", "DB2", classSet3);
+			
+					// Store Teacher
+					entitymanager.persist(teacher1);
+					entitymanager.persist(teacher2);
+					entitymanager.persist(teacher3);
+			
+					entitymanager.getTransaction().commit();
+					entitymanager.close();
+					emfactory.close();
+			
+				}
+			*/
 	public void demonstrateCriterie() {
 
 	}
-- 
GitLab