From 1d030b97219b8e905fbb0bb9c9d1b50aa22a0e53 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz>
Date: Wed, 14 Apr 2021 13:59:37 +0200
Subject: [PATCH] Improve master.

---
 .../java/koz01/java2/lab10/BaseEntity.java    |   2 +
 .../java/koz01/java2/lab10/Department.java    |   2 +
 src/main/java/koz01/java2/lab10/Employee.java |   7 +-
 src/test/java/koz01/java2/lab10/DemoJPA.java  | 100 ++++++++++++++++++
 4 files changed, 107 insertions(+), 4 deletions(-)

diff --git a/src/main/java/koz01/java2/lab10/BaseEntity.java b/src/main/java/koz01/java2/lab10/BaseEntity.java
index b1ed9db..176191a 100644
--- a/src/main/java/koz01/java2/lab10/BaseEntity.java
+++ b/src/main/java/koz01/java2/lab10/BaseEntity.java
@@ -9,9 +9,11 @@ import javax.persistence.MappedSuperclass;
 
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
+import lombok.ToString;
 
 @MappedSuperclass
 @EqualsAndHashCode
+@ToString
 public class BaseEntity implements Serializable {
 
 	@Getter
diff --git a/src/main/java/koz01/java2/lab10/Department.java b/src/main/java/koz01/java2/lab10/Department.java
index 8b09f00..8ab9522 100644
--- a/src/main/java/koz01/java2/lab10/Department.java
+++ b/src/main/java/koz01/java2/lab10/Department.java
@@ -9,8 +9,10 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+import lombok.ToString;
 
 @Entity
+@ToString(callSuper = true)
 @AllArgsConstructor
 @NoArgsConstructor
 public class Department extends BaseEntity {
diff --git a/src/main/java/koz01/java2/lab10/Employee.java b/src/main/java/koz01/java2/lab10/Employee.java
index f21bdc1..b4b98df 100644
--- a/src/main/java/koz01/java2/lab10/Employee.java
+++ b/src/main/java/koz01/java2/lab10/Employee.java
@@ -7,16 +7,14 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+import lombok.ToString;
 
 @Entity
+@ToString(callSuper = true)
 @AllArgsConstructor
 @NoArgsConstructor
 public class Employee extends BaseEntity {
 
-	@Getter
-	@Setter
-	private int eid;
-
 	@Getter
 	@Setter
 	private String ename;
@@ -29,6 +27,7 @@ public class Employee extends BaseEntity {
 	@Setter
 	private String deg;
 
+	@ToString.Exclude
 	@Transient
 	@Setter
 	@Getter
diff --git a/src/test/java/koz01/java2/lab10/DemoJPA.java b/src/test/java/koz01/java2/lab10/DemoJPA.java
index d859bdd..deea5f3 100644
--- a/src/test/java/koz01/java2/lab10/DemoJPA.java
+++ b/src/test/java/koz01/java2/lab10/DemoJPA.java
@@ -9,9 +9,15 @@ import java.util.Set;
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
 
 import org.junit.jupiter.api.Test;
 
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
 public class DemoJPA {
 
 	@Test
@@ -134,6 +140,67 @@ public class DemoJPA {
 		emfactory.close();
 	}
 
+	@Test
+	public void demostrateOneToManyMapped() {
+		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 Employee
+		entitymanager.persist(employee1);
+		entitymanager.persist(employee2);
+		entitymanager.persist(employee3);
+
+		entitymanager.getTransaction().commit();
+		entitymanager.close();
+		emfactory.close();
+
+		emfactory = Persistence.createEntityManagerFactory("lab10");
+		entitymanager = emfactory.createEntityManager();
+
+		CriteriaBuilder cb = entitymanager.getCriteriaBuilder();
+		CriteriaQuery<Department> query = entitymanager.getCriteriaBuilder()
+			.createQuery(Department.class);
+		Root<Department> root = query.from(Department.class);
+
+		for (Department res : entitymanager.createQuery(query.select(root).where(cb
+			.like(root.get(Department_.name), "dep")))
+			.getResultList())
+		{
+
+			log.info("dep = {}, dep.employee = {}", res, res.getEmployee());
+		}
+	}
+
 	@Test
 	public void demostrateManyToMany() {
 
@@ -188,5 +255,38 @@ public class DemoJPA {
 
 	public void demonstrateCriterie() {
 
+				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);
+				entitymanager.getTransaction().commit();
+		
+
+				entitymanager.close();
+				emfactory.close();
+
 	}
 }
-- 
GitLab