From 98699e7928d4cb5068a1eb6fd17b7d3e76e2cfb1 Mon Sep 17 00:00:00 2001 From: Ammar Date: Wed, 7 Sep 2022 10:36:17 +0200 Subject: [PATCH 01/28] [AKAZ] Modified jdk version to 11 --- .gitignore | 210 ++++++++++++++++++++++++++++++++++++++ .idea/compiler.xml | 13 +++ .idea/jarRepositories.xml | 20 ++++ .idea/misc.xml | 12 +++ .idea/vcs.xml | 6 ++ pom.xml | 4 +- 6 files changed, 263 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..9e904d0bd --- /dev/null +++ b/.gitignore @@ -0,0 +1,210 @@ +# Created by https://www.toptal.com/developers/gitignore/api/linux,java,maven,macos,intellij +# Edit at https://www.toptal.com/developers/gitignore?templates=linux,java,maven,macos,intellij + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +# Eclipse m2e generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# End of https://www.toptal.com/developers/gitignore/api/linux,java,maven,macos,intellij diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 000000000..8c3c5ffa5 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 000000000..712ab9d98 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..67e1e6113 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6948616ce..a3015a829 100644 --- a/pom.xml +++ b/pom.xml @@ -8,8 +8,8 @@ 0.0.1-SNAPSHOT - 1.8 - 1.8 + 1.11 + 1.11 From 8578c825df7ce574b4a14875ed948d52e1edb90a Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Wed, 7 Sep 2022 14:03:59 +0200 Subject: [PATCH 02/28] [HMNG] Added two business layer classes provided by the labs in package `domain` --- .idea/misc.xml | 18 +++++++- src/main/java/jpa/domain/Department.java | 47 +++++++++++++++++++ src/main/java/jpa/domain/Employee.java | 57 ++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 src/main/java/jpa/domain/Department.java create mode 100644 src/main/java/jpa/domain/Employee.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 67e1e6113..f8adae09f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,18 @@ + + + - + + + \ No newline at end of file diff --git a/src/main/java/jpa/domain/Department.java b/src/main/java/jpa/domain/Department.java new file mode 100644 index 000000000..ec182fec1 --- /dev/null +++ b/src/main/java/jpa/domain/Department.java @@ -0,0 +1,47 @@ +package jpa.domain; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Department { private Long id; + private String name; + + private List employees = new ArrayList(); + + public Department() { + super(); + } + + public Department(String name) { + this.name = name; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @OneToMany(mappedBy = "department", cascade = CascadeType.PERSIST) + public List getEmployees() { + return employees; + } + + public void setEmployees(List employees) { + this.employees = employees; + } +} \ No newline at end of file diff --git a/src/main/java/jpa/domain/Employee.java b/src/main/java/jpa/domain/Employee.java new file mode 100644 index 000000000..cf7bf00b4 --- /dev/null +++ b/src/main/java/jpa/domain/Employee.java @@ -0,0 +1,57 @@ +package jpa.domain; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + +@Entity +public class Employee { + + private Long id; + private String name; + + private Department department; + + public Employee() { } + + public Employee(String name, Department department) { + this.name = name; + this.department = department; + } + + public Employee(String name) { + this.name = name; + } + + @Id + @GeneratedValue + public Long getId() { + return id; } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @ManyToOne + public Department getDepartment() { + return department; + } + + public void setDepartment(Department department) { + this.department = department; + } + + @Override + public String toString() { + return "Employee [id=" + id + ", name=" + name + ", department="; + } +} \ No newline at end of file From 0770cfed4022367d724620bffec5abc1c5c55a5c Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Wed, 7 Sep 2022 14:05:45 +0200 Subject: [PATCH 03/28] [HMNG] Auto generated IDEA files --- .idea/.gitignore | 8 ++++++++ .idea/codeStyles/Project.xml | 13 +++++++++++++ .idea/codeStyles/codeStyleConfig.xml | 5 +++++ .idea/jpa-buddy.xml | 6 ++++++ .idea/sbt.xml | 6 ++++++ 5 files changed, 38 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/jpa-buddy.xml create mode 100644 .idea/sbt.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..13566b81b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 000000000..f5cb8715f --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 000000000..a55e7a179 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/jpa-buddy.xml b/.idea/jpa-buddy.xml new file mode 100644 index 000000000..966d5f56a --- /dev/null +++ b/.idea/jpa-buddy.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/sbt.xml b/.idea/sbt.xml new file mode 100644 index 000000000..201874354 --- /dev/null +++ b/.idea/sbt.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file From f0504adbfa6b34206cedd9cc28136b819114dfcb Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Wed, 7 Sep 2022 14:06:44 +0200 Subject: [PATCH 04/28] [HMNG] Updated .gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 9e904d0bd..4d31cabf4 100644 --- a/.gitignore +++ b/.gitignore @@ -208,3 +208,7 @@ buildNumber.properties .classpath # End of https://www.toptal.com/developers/gitignore/api/linux,java,maven,macos,intellij + +# Data folder generated by DB is expected to be ignored + +data \ No newline at end of file From 6501e77969db9fec310833f67090a88c9b005a44 Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Wed, 7 Sep 2022 19:32:54 +0200 Subject: [PATCH 05/28] [HMNG] Added DAO (corresponding to Q3) and tasks to be completed. --- README.md | 10 +++++ src/main/java/jpa/dao/EntityDAO.java | 55 ++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/main/java/jpa/dao/EntityDAO.java diff --git a/README.md b/README.md index 7ef29bb53..296e4c095 100644 --- a/README.md +++ b/README.md @@ -1 +1,11 @@ # Template de projet pour le TP JPA 2021 UniR + +## Lab 1 + +Todo: + +- [ ] connect to mysql server (Q4) +- [ ] design PO and DAO (Q5, but also review of 1, 2, 3) +- [ ] N+1 select problem + +And review for coding style and code structure \ No newline at end of file diff --git a/src/main/java/jpa/dao/EntityDAO.java b/src/main/java/jpa/dao/EntityDAO.java new file mode 100644 index 000000000..443c15811 --- /dev/null +++ b/src/main/java/jpa/dao/EntityDAO.java @@ -0,0 +1,55 @@ +package jpa.dao; + +import jpa.domain.Department; +import jpa.domain.Employee; + +import javax.persistence.EntityManager; +import javax.persistence.Persistence; + +public class EntityDAO { + private EntityManager manager; + + public EntityDAO(EntityManager manager) { + this.manager = manager; + } + + public void createEmployees() { + var numOfEmployees = manager + .createQuery("Select a From Employee a", Employee.class) + .getResultList().size(); + if (numOfEmployees == 0) { + var department = new Department("java"); + manager.persist(department); + manager.persist(new Employee("Jakab Gipsz",department)); + manager.persist(new Employee("Captain Nemo",department)); + } + } + + public void listEmployees() { + var listResults = manager + .createQuery("Select a From Employee a", Employee.class) + .getResultList(); + System.out.println("num of employees:" + listResults.size()); + for (var next : listResults) { + System.out.println("next employee: " + next); + } + } + + public static void main(String[] args) { + var entityManagerFactory = Persistence.createEntityManagerFactory("example"); + var entityManager = entityManagerFactory.createEntityManager(); + var entityDAO = new EntityDAO(entityManager); + + var tx = entityManager.getTransaction(); + tx.begin(); + try { + entityDAO.createEmployees(); + } catch (Exception e) { + e.printStackTrace(); + } + tx.commit(); + entityDAO.listEmployees(); + entityManager.close(); + System.out.println("... done"); + } +} From d0a02b63bc8a375b7ec8561a078b90e50f812d5b Mon Sep 17 00:00:00 2001 From: Ammar Date: Thu, 8 Sep 2022 09:58:59 +0200 Subject: [PATCH 06/28] [AKAZ] Fixed no persistence provider exception --- .idea/compiler.xml | 1 + .idea/dataSources.xml | 38 ++++++++++++++++++++++++++++ .idea/misc.xml | 2 +- src/main/java/jpa/dao/EntityDAO.java | 2 +- 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 .idea/dataSources.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 8c3c5ffa5..71860df89 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -9,5 +9,6 @@ + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 000000000..1867098c6 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,38 @@ + + + + + hsqldb.remote + true + true + Hibernate + +/home/ammar/Documents/M2/TAA/TP/tpjpa2022/src/main/resources/META-INF/persistence.xml + org.hsqldb.jdbcDriver + jdbc:hsqldb:hsql://localhost/ + $ProjectFileDir$ + + + mysql + true + true + Hibernate + +/home/ammar/Documents/M2/TAA/TP/tpjpa2022/src/main/resources/META-INF/persistence.xml + com.mysql.jdbc.Driver + jdbc:mysql://localhost/mydatabase + $ProjectFileDir$ + + + hsqldb.remote + true + true + Hibernate + +/home/ammar/Documents/M2/TAA/TP/tpjpa2022/src/main/resources/META-INF/persistence.xml + org.hsqldb.jdbcDriver + jdbc:hsqldb:hsql://localhost/ + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index f8adae09f..1c7209eff 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -21,7 +21,7 @@ - + diff --git a/src/main/java/jpa/dao/EntityDAO.java b/src/main/java/jpa/dao/EntityDAO.java index 443c15811..ca02431dd 100644 --- a/src/main/java/jpa/dao/EntityDAO.java +++ b/src/main/java/jpa/dao/EntityDAO.java @@ -36,7 +36,7 @@ public void listEmployees() { } public static void main(String[] args) { - var entityManagerFactory = Persistence.createEntityManagerFactory("example"); + var entityManagerFactory = Persistence.createEntityManagerFactory("dev"); var entityManager = entityManagerFactory.createEntityManager(); var entityDAO = new EntityDAO(entityManager); From aeac1e82ab89eb2e7ef2a6c1cf5f8e56de144e1d Mon Sep 17 00:00:00 2001 From: Ammar Date: Thu, 8 Sep 2022 10:29:24 +0200 Subject: [PATCH 07/28] [AKAZ] Added .idea to gitignore --- .gitignore | 1 + src/main/java/jpa/domain/Employee.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4d31cabf4..1e38099be 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 +.idea # User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml diff --git a/src/main/java/jpa/domain/Employee.java b/src/main/java/jpa/domain/Employee.java index cf7bf00b4..5b6d8d3ad 100644 --- a/src/main/java/jpa/domain/Employee.java +++ b/src/main/java/jpa/domain/Employee.java @@ -27,7 +27,8 @@ public Employee(String name) { @Id @GeneratedValue public Long getId() { - return id; } + return id; + } public void setId(Long id) { this.id = id; From 680a3daca93593a965510b009bae56ad3a7a7255 Mon Sep 17 00:00:00 2001 From: Ammar96399 <50889372+Ammar96399@users.noreply.github.com> Date: Thu, 8 Sep 2022 10:32:20 +0200 Subject: [PATCH 08/28] Delete .idea directory --- .idea/.gitignore | 8 ------ .idea/codeStyles/Project.xml | 13 ---------- .idea/codeStyles/codeStyleConfig.xml | 5 ---- .idea/compiler.xml | 14 ---------- .idea/dataSources.xml | 38 ---------------------------- .idea/jarRepositories.xml | 20 --------------- .idea/jpa-buddy.xml | 6 ----- .idea/misc.xml | 28 -------------------- .idea/sbt.xml | 6 ----- .idea/vcs.xml | 6 ----- 10 files changed, 144 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/dataSources.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/jpa-buddy.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/sbt.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b81b..000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index f5cb8715f..000000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index a55e7a179..000000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 71860df89..000000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml deleted file mode 100644 index 1867098c6..000000000 --- a/.idea/dataSources.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - hsqldb.remote - true - true - Hibernate - -/home/ammar/Documents/M2/TAA/TP/tpjpa2022/src/main/resources/META-INF/persistence.xml - org.hsqldb.jdbcDriver - jdbc:hsqldb:hsql://localhost/ - $ProjectFileDir$ - - - mysql - true - true - Hibernate - -/home/ammar/Documents/M2/TAA/TP/tpjpa2022/src/main/resources/META-INF/persistence.xml - com.mysql.jdbc.Driver - jdbc:mysql://localhost/mydatabase - $ProjectFileDir$ - - - hsqldb.remote - true - true - Hibernate - -/home/ammar/Documents/M2/TAA/TP/tpjpa2022/src/main/resources/META-INF/persistence.xml - org.hsqldb.jdbcDriver - jdbc:hsqldb:hsql://localhost/ - $ProjectFileDir$ - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index 712ab9d98..000000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/jpa-buddy.xml b/.idea/jpa-buddy.xml deleted file mode 100644 index 966d5f56a..000000000 --- a/.idea/jpa-buddy.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 1c7209eff..000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/sbt.xml b/.idea/sbt.xml deleted file mode 100644 index 201874354..000000000 --- a/.idea/sbt.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfb..000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From bcc2a4cf8fd0f8890bf3bad30c6fc653b38232bd Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Thu, 8 Sep 2022 10:54:14 +0200 Subject: [PATCH 09/28] [HMNG] Added Professional class to model --- README.md | 4 +- src/main/java/jpa/po/Professional.java | 55 ++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/main/java/jpa/po/Professional.java diff --git a/README.md b/README.md index 296e4c095..c03389e39 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ Todo: -- [ ] connect to mysql server (Q4) +- [x] connect to mysql server (Q4) - [ ] design PO and DAO (Q5, but also review of 1, 2, 3) - [ ] N+1 select problem -And review for coding style and code structure \ No newline at end of file +And review for coding style, code structure and tests \ No newline at end of file diff --git a/src/main/java/jpa/po/Professional.java b/src/main/java/jpa/po/Professional.java new file mode 100644 index 000000000..bcdbe910e --- /dev/null +++ b/src/main/java/jpa/po/Professional.java @@ -0,0 +1,55 @@ +package jpa.po; + +import javax.persistence.*; +import java.util.ArrayList; + +@Entity +public class Professional { + private Long id; + private String firstName; + private String lastName; + + private List listAppointments = new ArrayList<>(); + + public Professional() {} + + public Professional(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + @OneToMany(mappedBy = "professional", cascade = CascadeType.PERSIST) + public List getListAppointments() { + return listAppointments; + } + + public void setListAppointments(List listAppointments) { + this.listAppointments = listAppointments; + } +} From 941f5c35dfe04edc16bf81f3ef75bc566e41ffa9 Mon Sep 17 00:00:00 2001 From: Ammar Date: Thu, 8 Sep 2022 11:07:23 +0200 Subject: [PATCH 10/28] [AKAZ] Created patient class --- src/main/java/jpa/po/Patient.java | 58 +++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/main/java/jpa/po/Patient.java diff --git a/src/main/java/jpa/po/Patient.java b/src/main/java/jpa/po/Patient.java new file mode 100644 index 000000000..f8c33d21d --- /dev/null +++ b/src/main/java/jpa/po/Patient.java @@ -0,0 +1,58 @@ +package jpa.po; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import java.util.List; + +public class Patient { + Long id; + String lastName; + String firstName; + List appointments; + + public Patient() { + super(); + } + + public Patient(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLastName() { + return this.lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getFirstName() { + return this.firstName; + } + + public void setFirstName(String lastName) { + this.firstName = lastName; + } + + @ManyToOne() + public List getAppointments() { + return appointments; + } + + public void setAppointments(List appointments) { + return this.appointments; + } +} From 93f5f67d59e6ab750c2d957502a8ef5718ca747d Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Thu, 8 Sep 2022 11:18:30 +0200 Subject: [PATCH 11/28] [HMNG] Finished implementation of model and fixed several issues --- src/main/java/jpa/po/Appointment.java | 81 ++++++++++++++++++++++++++ src/main/java/jpa/po/Patient.java | 29 +++++---- src/main/java/jpa/po/Professional.java | 12 ++++ 3 files changed, 112 insertions(+), 10 deletions(-) create mode 100644 src/main/java/jpa/po/Appointment.java diff --git a/src/main/java/jpa/po/Appointment.java b/src/main/java/jpa/po/Appointment.java new file mode 100644 index 000000000..b5428321a --- /dev/null +++ b/src/main/java/jpa/po/Appointment.java @@ -0,0 +1,81 @@ +package jpa.po; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import java.time.LocalDateTime; +import java.util.List; + +@Entity +public class Appointment { + + private Long id; + + private String reason; + private String category; + private LocalDateTime startingTime; + + private Professional professional; + private Patient patient; + + public Appointment() {} + + public Appointment(String reason, String category, LocalDateTime startingTime) { + this.reason = reason; + this.category = category; + this.startingTime = startingTime; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public LocalDateTime getStartingTime() { + return startingTime; + } + + public void setStartingTime(LocalDateTime startingTime) { + this.startingTime = startingTime; + } + + @ManyToOne + public Professional getProfessional() { + return professional; + } + + public void setProfessional(Professional professional) { + this.professional = professional; + } + + @ManyToOne + public Patient getPatient() { + return patient; + } + + public void setPatient(Patient patient) { + this.patient = patient; + } +} diff --git a/src/main/java/jpa/po/Patient.java b/src/main/java/jpa/po/Patient.java index f8c33d21d..18056577b 100644 --- a/src/main/java/jpa/po/Patient.java +++ b/src/main/java/jpa/po/Patient.java @@ -1,16 +1,17 @@ package jpa.po; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; +import javax.persistence.*; import java.util.List; +@Entity public class Patient { - Long id; - String lastName; - String firstName; - List appointments; + private Long id; + private String lastName; + private String firstName; + private List appointments; + + @ManyToOne + private Professional professional; public Patient() { super(); @@ -47,12 +48,20 @@ public void setFirstName(String lastName) { this.firstName = lastName; } - @ManyToOne() + @OneToMany(mappedBy = "patient", cascade = CascadeType.PERSIST) public List getAppointments() { return appointments; } public void setAppointments(List appointments) { - return this.appointments; + this.appointments = appointments; + } + + public Professional getProfessionals() { + return professional; + } + + public void setProfessionals(Professional professional) { + this.professional = professional; } } diff --git a/src/main/java/jpa/po/Professional.java b/src/main/java/jpa/po/Professional.java index bcdbe910e..cbc4e6d74 100644 --- a/src/main/java/jpa/po/Professional.java +++ b/src/main/java/jpa/po/Professional.java @@ -2,6 +2,7 @@ import javax.persistence.*; import java.util.ArrayList; +import java.util.List; @Entity public class Professional { @@ -11,6 +12,8 @@ public class Professional { private List listAppointments = new ArrayList<>(); + private List listPatients = new ArrayList<>(); + public Professional() {} public Professional(String firstName, String lastName) { @@ -52,4 +55,13 @@ public List getListAppointments() { public void setListAppointments(List listAppointments) { this.listAppointments = listAppointments; } + + @OneToMany(mappedBy = "professional", cascade = CascadeType.PERSIST) + public List getListPatients() { + return listPatients; + } + + public void setListPatients(List listPatients) { + this.listPatients = listPatients; + } } From 050fd0d6a3d0ae2099fc6b3244a194c14fa34d26 Mon Sep 17 00:00:00 2001 From: Ammar Date: Fri, 9 Sep 2022 08:59:37 +0200 Subject: [PATCH 12/28] [AKAZ] Added DAO for Entities and completed PatientDAO --- src/main/java/jpa/dao/AppointmentDAO.java | 12 ++++++ src/main/java/jpa/dao/PatientDAO.java | 45 ++++++++++++++++++++++ src/main/java/jpa/dao/ProfessionalDAO.java | 4 ++ 3 files changed, 61 insertions(+) create mode 100644 src/main/java/jpa/dao/AppointmentDAO.java create mode 100644 src/main/java/jpa/dao/PatientDAO.java create mode 100644 src/main/java/jpa/dao/ProfessionalDAO.java diff --git a/src/main/java/jpa/dao/AppointmentDAO.java b/src/main/java/jpa/dao/AppointmentDAO.java new file mode 100644 index 000000000..3c6f3ea26 --- /dev/null +++ b/src/main/java/jpa/dao/AppointmentDAO.java @@ -0,0 +1,12 @@ +package jpa.dao; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +public class AppointmentDAO { + private EntityManager manager; + public AppointmentDAO(EntityManager manager) { + this.manager = manager; + } +} diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java new file mode 100644 index 000000000..74f376684 --- /dev/null +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -0,0 +1,45 @@ +package jpa.dao; + +import jpa.po.Patient; + +import javax.persistence.EntityManager; + +public class PatientDAO { + private EntityManager manager; + + public PatientDAO(EntityManager manager) { + this.manager = manager; + } + + public void createPatients(String firstName, String lastName) { + manager.persist(new Patient(firstName, lastName)); + } + + public Object getPatientByName(String firstName, String lastName) { + return manager + .createQuery("SELECT p FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName") + .setParameter("firstName", firstName) + .setParameter("lastName", lastName) + .getResultList() + .get(0); + } + + public Object getPatientId(String firstName, String lastName) { + return manager + .createQuery("SELECT p.id FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName") + .setParameter("firstName", firstName) + .setParameter("lastName", lastName) + .getResultList() + .get(0); + } + + public void listPatients() { + var listResults = manager + .createQuery("Select p From Patient p", Patient.class) + .getResultList(); + System.out.print("Number of patients: " + listResults.size()); + for (var next : listResults) { + System.out.println("Next patient: " + next); + } + } +} diff --git a/src/main/java/jpa/dao/ProfessionalDAO.java b/src/main/java/jpa/dao/ProfessionalDAO.java new file mode 100644 index 000000000..6dc043be0 --- /dev/null +++ b/src/main/java/jpa/dao/ProfessionalDAO.java @@ -0,0 +1,4 @@ +package jpa.dao; + +public class ProfessionalDAO { +} From 7d9f313af592a219b3d3141e94f0d0e12328ac8f Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Fri, 9 Sep 2022 10:23:36 +0200 Subject: [PATCH 13/28] [HMNG] Typed DAO queries --- src/main/java/jpa/dao/PatientDAO.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index 74f376684..c5f30f696 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -15,18 +15,18 @@ public void createPatients(String firstName, String lastName) { manager.persist(new Patient(firstName, lastName)); } - public Object getPatientByName(String firstName, String lastName) { + public Patient getPatientByName(String firstName, String lastName) { return manager - .createQuery("SELECT p FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName") + .createQuery("SELECT p FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName", Patient.class) .setParameter("firstName", firstName) .setParameter("lastName", lastName) .getResultList() .get(0); } - public Object getPatientId(String firstName, String lastName) { + public Long getPatientId(String firstName, String lastName) { return manager - .createQuery("SELECT p.id FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName") + .createQuery("SELECT p.id FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName", Long.class) .setParameter("firstName", firstName) .setParameter("lastName", lastName) .getResultList() From 1a0745806d7d3e0e8ac68538cccadd0f4ee65637 Mon Sep 17 00:00:00 2001 From: Ammar Date: Fri, 9 Sep 2022 11:11:26 +0200 Subject: [PATCH 14/28] [AKAZ] Fixed entitymanager problem in PatientDAO --- src/main/java/jpa/dao/PatientDAO.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index 74f376684..4ae6c084d 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -1,5 +1,6 @@ package jpa.dao; +import jpa.EntityManagerHelper; import jpa.po.Patient; import javax.persistence.EntityManager; @@ -7,8 +8,8 @@ public class PatientDAO { private EntityManager manager; - public PatientDAO(EntityManager manager) { - this.manager = manager; + public PatientDAO() { + this.manager = EntityManagerHelper.getEntityManager(); } public void createPatients(String firstName, String lastName) { From d132cf2d4a227387401c6f9d665644e93c5daa15 Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Fri, 9 Sep 2022 11:39:27 +0200 Subject: [PATCH 15/28] [HMNG] Removed unused domain definitions, added generic DAO --- src/main/java/jpa/EntityManagerHelper.java | 2 +- src/main/java/jpa/dao/AppointmentDAO.java | 14 +++--- src/main/java/jpa/dao/GenericJpaDao.java | 42 ++++++++++++++++ src/main/java/jpa/dao/PatientDAO.java | 7 +-- src/main/java/jpa/dao/ProfessionalDAO.java | 13 ++++- src/main/java/jpa/domain/Department.java | 47 ------------------ src/main/java/jpa/domain/Employee.java | 58 ---------------------- src/main/java/jpa/po/Appointment.java | 12 +++++ src/main/java/jpa/po/Patient.java | 8 +++ src/main/java/jpa/po/Professional.java | 8 +++ 10 files changed, 95 insertions(+), 116 deletions(-) create mode 100644 src/main/java/jpa/dao/GenericJpaDao.java delete mode 100644 src/main/java/jpa/domain/Department.java delete mode 100644 src/main/java/jpa/domain/Employee.java diff --git a/src/main/java/jpa/EntityManagerHelper.java b/src/main/java/jpa/EntityManagerHelper.java index c24bf6d91..ec2ebe0ab 100644 --- a/src/main/java/jpa/EntityManagerHelper.java +++ b/src/main/java/jpa/EntityManagerHelper.java @@ -4,7 +4,7 @@ import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; -public class EntityManagerHelper { +public final class EntityManagerHelper { private static final EntityManagerFactory emf; private static final ThreadLocal threadLocal; diff --git a/src/main/java/jpa/dao/AppointmentDAO.java b/src/main/java/jpa/dao/AppointmentDAO.java index 3c6f3ea26..03df0146f 100644 --- a/src/main/java/jpa/dao/AppointmentDAO.java +++ b/src/main/java/jpa/dao/AppointmentDAO.java @@ -1,12 +1,14 @@ package jpa.dao; +import jpa.EntityManagerHelper; +import jpa.po.Appointment; + import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; -public class AppointmentDAO { - private EntityManager manager; - public AppointmentDAO(EntityManager manager) { - this.manager = manager; +public class AppointmentDAO extends GenericJpaDao { + public AppointmentDAO() { + super(Appointment.class); } + + // Create, list, remove and update } diff --git a/src/main/java/jpa/dao/GenericJpaDao.java b/src/main/java/jpa/dao/GenericJpaDao.java new file mode 100644 index 000000000..055f91e6f --- /dev/null +++ b/src/main/java/jpa/dao/GenericJpaDao.java @@ -0,0 +1,42 @@ +package jpa.dao; + +import jpa.EntityManagerHelper; +import org.hibernate.cfg.NotYetImplementedException; + +import javax.persistence.EntityManager; +import java.util.List; + +public class GenericJpaDao { + + protected final EntityManager manager; + protected final Class objectClass; + + protected GenericJpaDao(Class objectClass) { + this.manager = EntityManagerHelper.getEntityManager(); + this.objectClass = objectClass; + } + + public T get(TK id) { + return this.manager.find(this.objectClass, id); + } + + public List getAll() { + return this.manager.createQuery( + "select obj from " + this.objectClass.getName() + " obj", objectClass) + .getResultList(); + } + + public boolean exists(TK id) { + return this.manager.find(this.objectClass, id) != null; + } + + public void update(TK id) { + // TODO + throw new NotYetImplementedException(); + } + + public void remove(TK id) { + // TODO + throw new NotYetImplementedException(); + } +} diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index 3a7538e57..e0ec3daf1 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -5,11 +5,10 @@ import javax.persistence.EntityManager; -public class PatientDAO { - private EntityManager manager; +public class PatientDAO extends GenericJpaDao { public PatientDAO() { - this.manager = EntityManagerHelper.getEntityManager(); + super(Patient.class); } public void createPatients(String firstName, String lastName) { @@ -43,4 +42,6 @@ public void listPatients() { System.out.println("Next patient: " + next); } } + + // Create, list, remove and update } diff --git a/src/main/java/jpa/dao/ProfessionalDAO.java b/src/main/java/jpa/dao/ProfessionalDAO.java index 6dc043be0..fc40937a7 100644 --- a/src/main/java/jpa/dao/ProfessionalDAO.java +++ b/src/main/java/jpa/dao/ProfessionalDAO.java @@ -1,4 +1,15 @@ package jpa.dao; -public class ProfessionalDAO { +import jpa.EntityManagerHelper; +import jpa.po.Professional; + +import javax.persistence.EntityManager; + +public class ProfessionalDAO extends GenericJpaDao { + + public ProfessionalDAO() { + super(Professional.class); + } + + // Create, list, remove and update } diff --git a/src/main/java/jpa/domain/Department.java b/src/main/java/jpa/domain/Department.java deleted file mode 100644 index ec182fec1..000000000 --- a/src/main/java/jpa/domain/Department.java +++ /dev/null @@ -1,47 +0,0 @@ -package jpa.domain; - -import javax.persistence.*; -import java.util.ArrayList; -import java.util.List; - -@Entity -public class Department { private Long id; - private String name; - - private List employees = new ArrayList(); - - public Department() { - super(); - } - - public Department(String name) { - this.name = name; - } - - @Id - @GeneratedValue - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @OneToMany(mappedBy = "department", cascade = CascadeType.PERSIST) - public List getEmployees() { - return employees; - } - - public void setEmployees(List employees) { - this.employees = employees; - } -} \ No newline at end of file diff --git a/src/main/java/jpa/domain/Employee.java b/src/main/java/jpa/domain/Employee.java deleted file mode 100644 index 5b6d8d3ad..000000000 --- a/src/main/java/jpa/domain/Employee.java +++ /dev/null @@ -1,58 +0,0 @@ -package jpa.domain; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.ManyToOne; - -@Entity -public class Employee { - - private Long id; - private String name; - - private Department department; - - public Employee() { } - - public Employee(String name, Department department) { - this.name = name; - this.department = department; - } - - public Employee(String name) { - this.name = name; - } - - @Id - @GeneratedValue - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @ManyToOne - public Department getDepartment() { - return department; - } - - public void setDepartment(Department department) { - this.department = department; - } - - @Override - public String toString() { - return "Employee [id=" + id + ", name=" + name + ", department="; - } -} \ No newline at end of file diff --git a/src/main/java/jpa/po/Appointment.java b/src/main/java/jpa/po/Appointment.java index b5428321a..a64a12cd9 100644 --- a/src/main/java/jpa/po/Appointment.java +++ b/src/main/java/jpa/po/Appointment.java @@ -78,4 +78,16 @@ public Patient getPatient() { public void setPatient(Patient patient) { this.patient = patient; } + + @Override + public String toString() { + return "Appointment{" + + "id=" + id + + ", reason='" + reason + '\'' + + ", category='" + category + '\'' + + ", startingTime=" + startingTime + + ", professional=" + professional.toString() + + ", patient=" + patient.toString() + + '}'; + } } diff --git a/src/main/java/jpa/po/Patient.java b/src/main/java/jpa/po/Patient.java index 18056577b..0f8cd75b3 100644 --- a/src/main/java/jpa/po/Patient.java +++ b/src/main/java/jpa/po/Patient.java @@ -64,4 +64,12 @@ public Professional getProfessionals() { public void setProfessionals(Professional professional) { this.professional = professional; } + + @Override + public String toString() { + return "Patient{" + + "lastName='" + lastName + '\'' + + ", firstName='" + firstName + '\'' + + '}'; + } } diff --git a/src/main/java/jpa/po/Professional.java b/src/main/java/jpa/po/Professional.java index cbc4e6d74..e4a8ef7d6 100644 --- a/src/main/java/jpa/po/Professional.java +++ b/src/main/java/jpa/po/Professional.java @@ -64,4 +64,12 @@ public List getListPatients() { public void setListPatients(List listPatients) { this.listPatients = listPatients; } + + @Override + public String toString() { + return "Professional{" + + "firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + '}'; + } } From e2fcddc8d1a36f32cffd4ea7c102886ad9321c27 Mon Sep 17 00:00:00 2001 From: Ammar Date: Fri, 9 Sep 2022 14:31:15 +0200 Subject: [PATCH 16/28] [AKAZ] Implemented ProfessionalDAO v0 --- src/main/java/jpa/dao/AppointmentDAO.java | 2 +- src/main/java/jpa/dao/PatientDAO.java | 9 --------- src/main/java/jpa/dao/ProfessionalDAO.java | 19 +++++++++++++++++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/jpa/dao/AppointmentDAO.java b/src/main/java/jpa/dao/AppointmentDAO.java index 03df0146f..b061469aa 100644 --- a/src/main/java/jpa/dao/AppointmentDAO.java +++ b/src/main/java/jpa/dao/AppointmentDAO.java @@ -2,6 +2,7 @@ import jpa.EntityManagerHelper; import jpa.po.Appointment; +import jpa.po.Professional; import javax.persistence.EntityManager; @@ -9,6 +10,5 @@ public class AppointmentDAO extends GenericJpaDao { public AppointmentDAO() { super(Appointment.class); } - // Create, list, remove and update } diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index e0ec3daf1..b52af6a3b 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -24,15 +24,6 @@ public Patient getPatientByName(String firstName, String lastName) { .get(0); } - public Long getPatientId(String firstName, String lastName) { - return manager - .createQuery("SELECT p.id FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName", Long.class) - .setParameter("firstName", firstName) - .setParameter("lastName", lastName) - .getResultList() - .get(0); - } - public void listPatients() { var listResults = manager .createQuery("Select p From Patient p", Patient.class) diff --git a/src/main/java/jpa/dao/ProfessionalDAO.java b/src/main/java/jpa/dao/ProfessionalDAO.java index fc40937a7..397fa4d91 100644 --- a/src/main/java/jpa/dao/ProfessionalDAO.java +++ b/src/main/java/jpa/dao/ProfessionalDAO.java @@ -4,6 +4,7 @@ import jpa.po.Professional; import javax.persistence.EntityManager; +import java.util.List; public class ProfessionalDAO extends GenericJpaDao { @@ -11,5 +12,23 @@ public ProfessionalDAO() { super(Professional.class); } + public void createProfessional(String firstName, String lastName) { + manager.persist(new Professional(firstName, lastName)); + } + + public Professional getPatientByName(String firstName, String lastName) { + return manager + .createQuery("SELECT p FROM Professional p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName", Professional.class) + .setParameter("firstName", firstName) + .setParameter("lastName", lastName) + .getResultList() + .get(0); + } + + public List listProfessionals() { + return manager + .createQuery("SELECT p FROM Patient p", Professional.class) + .getResultList(); + } // Create, list, remove and update } From 4290fc3f9f09343276a182a92e4c56241ec2db5b Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Fri, 9 Sep 2022 14:36:22 +0200 Subject: [PATCH 17/28] [HMNG] Minor updates in DAO --- src/main/java/jpa/dao/AppointmentDAO.java | 3 ++ src/main/java/jpa/dao/GenericJpaDao.java | 6 ++-- src/main/java/jpa/dao/PatientDAO.java | 37 +++++++++++++++++------ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/main/java/jpa/dao/AppointmentDAO.java b/src/main/java/jpa/dao/AppointmentDAO.java index b061469aa..ddd209888 100644 --- a/src/main/java/jpa/dao/AppointmentDAO.java +++ b/src/main/java/jpa/dao/AppointmentDAO.java @@ -10,5 +10,8 @@ public class AppointmentDAO extends GenericJpaDao { public AppointmentDAO() { super(Appointment.class); } + + // Access appointments + // Create, list, remove and update } diff --git a/src/main/java/jpa/dao/GenericJpaDao.java b/src/main/java/jpa/dao/GenericJpaDao.java index 055f91e6f..993edcabf 100644 --- a/src/main/java/jpa/dao/GenericJpaDao.java +++ b/src/main/java/jpa/dao/GenericJpaDao.java @@ -16,13 +16,13 @@ protected GenericJpaDao(Class objectClass) { this.objectClass = objectClass; } - public T get(TK id) { + public T getById(TK id) { return this.manager.find(this.objectClass, id); } public List getAll() { - return this.manager.createQuery( - "select obj from " + this.objectClass.getName() + " obj", objectClass) + return this.manager + .createQuery("select obj from " + this.objectClass.getName() + " obj", objectClass) .getResultList(); } diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index b52af6a3b..a7b8dfdc4 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -1,9 +1,9 @@ package jpa.dao; -import jpa.EntityManagerHelper; +import jpa.po.Appointment; import jpa.po.Patient; -import javax.persistence.EntityManager; +import java.util.List; public class PatientDAO extends GenericJpaDao { @@ -11,10 +11,14 @@ public PatientDAO() { super(Patient.class); } + // Create queries + public void createPatients(String firstName, String lastName) { manager.persist(new Patient(firstName, lastName)); } + // Fetch queries + public Patient getPatientByName(String firstName, String lastName) { return manager .createQuery("SELECT p FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName", Patient.class) @@ -24,15 +28,30 @@ public Patient getPatientByName(String firstName, String lastName) { .get(0); } - public void listPatients() { - var listResults = manager + public List getPatientList() { + return manager .createQuery("Select p From Patient p", Patient.class) .getResultList(); - System.out.print("Number of patients: " + listResults.size()); - for (var next : listResults) { - System.out.println("Next patient: " + next); - } } - // Create, list, remove and update + // Remove queries + + public void removePatientByName(String firstName, String lastName) { + + } + + // Update queries + + public void addAppointmentToPatient(String firstName, String lastName, Appointment appointment) { + + } + + + public void removeAppointmentToPatient(String firstName, String lastName, Long appointmentId) { + + } + + public static void main(String[] args) { + } + } From fdda459a3094bb40052193f3fd35d2026618e52f Mon Sep 17 00:00:00 2001 From: Ammar Date: Fri, 9 Sep 2022 14:59:49 +0200 Subject: [PATCH 18/28] [AKAZ] Implement AppointmentDAO --- src/main/java/jpa/dao/AppointmentDAO.java | 20 +++- src/main/java/jpa/dao/EntityDAO.java | 110 +++++++++--------- ...{GenericJpaDao.java => GenericJpaDAO.java} | 4 +- src/main/java/jpa/dao/PatientDAO.java | 2 +- src/main/java/jpa/dao/ProfessionalDAO.java | 4 +- src/main/java/jpa/po/Appointment.java | 15 +-- 6 files changed, 79 insertions(+), 76 deletions(-) rename src/main/java/jpa/dao/{GenericJpaDao.java => GenericJpaDAO.java} (91%) diff --git a/src/main/java/jpa/dao/AppointmentDAO.java b/src/main/java/jpa/dao/AppointmentDAO.java index ddd209888..a31cb5536 100644 --- a/src/main/java/jpa/dao/AppointmentDAO.java +++ b/src/main/java/jpa/dao/AppointmentDAO.java @@ -1,17 +1,31 @@ package jpa.dao; -import jpa.EntityManagerHelper; import jpa.po.Appointment; +import jpa.po.Patient; import jpa.po.Professional; -import javax.persistence.EntityManager; +import java.time.LocalDateTime; +import java.util.List; -public class AppointmentDAO extends GenericJpaDao { +public class AppointmentDAO extends GenericJpaDAO { public AppointmentDAO() { super(Appointment.class); } + public void addAppointment(String reason, LocalDateTime startingTime, Patient patient, Professional professional) { + manager.persist(new Appointment(reason, startingTime, patient, professional)); + } // Access appointments + public List getAppointmentsByProfessionalId(Long id) { + return manager.createQuery("SELECT p FROM Professional p WHERE p.id = :id", Professional.class) + .setParameter("id", id) + .getResultList(); + } + public List getAppointmentsByPatientId(Long id) { + return manager.createQuery("SELECT p FROM Patient p WHERE p.id = :id", Patient.class) + .setParameter("id", id) + .getResultList(); + } // Create, list, remove and update } diff --git a/src/main/java/jpa/dao/EntityDAO.java b/src/main/java/jpa/dao/EntityDAO.java index ca02431dd..b513c4091 100644 --- a/src/main/java/jpa/dao/EntityDAO.java +++ b/src/main/java/jpa/dao/EntityDAO.java @@ -1,55 +1,55 @@ -package jpa.dao; - -import jpa.domain.Department; -import jpa.domain.Employee; - -import javax.persistence.EntityManager; -import javax.persistence.Persistence; - -public class EntityDAO { - private EntityManager manager; - - public EntityDAO(EntityManager manager) { - this.manager = manager; - } - - public void createEmployees() { - var numOfEmployees = manager - .createQuery("Select a From Employee a", Employee.class) - .getResultList().size(); - if (numOfEmployees == 0) { - var department = new Department("java"); - manager.persist(department); - manager.persist(new Employee("Jakab Gipsz",department)); - manager.persist(new Employee("Captain Nemo",department)); - } - } - - public void listEmployees() { - var listResults = manager - .createQuery("Select a From Employee a", Employee.class) - .getResultList(); - System.out.println("num of employees:" + listResults.size()); - for (var next : listResults) { - System.out.println("next employee: " + next); - } - } - - public static void main(String[] args) { - var entityManagerFactory = Persistence.createEntityManagerFactory("dev"); - var entityManager = entityManagerFactory.createEntityManager(); - var entityDAO = new EntityDAO(entityManager); - - var tx = entityManager.getTransaction(); - tx.begin(); - try { - entityDAO.createEmployees(); - } catch (Exception e) { - e.printStackTrace(); - } - tx.commit(); - entityDAO.listEmployees(); - entityManager.close(); - System.out.println("... done"); - } -} +//package jpa.dao; +// +//import jpa.domain.Department; +//import jpa.domain.Employee; +// +//import javax.persistence.EntityManager; +//import javax.persistence.Persistence; +// +//public class EntityDAO { +// private EntityManager manager; +// +// public EntityDAO(EntityManager manager) { +// this.manager = manager; +// } +// +// public void createEmployees() { +// var numOfEmployees = manager +// .createQuery("Select a From Employee a", Employee.class) +// .getResultList().size(); +// if (numOfEmployees == 0) { +// var department = new Department("java"); +// manager.persist(department); +// manager.persist(new Employee("Jakab Gipsz",department)); +// manager.persist(new Employee("Captain Nemo",department)); +// } +// } +// +// public void listEmployees() { +// var listResults = manager +// .createQuery("Select a From Employee a", Employee.class) +// .getResultList(); +// System.out.println("num of employees:" + listResults.size()); +// for (var next : listResults) { +// System.out.println("next employee: " + next); +// } +// } +// +// public static void main(String[] args) { +// var entityManagerFactory = Persistence.createEntityManagerFactory("dev"); +// var entityManager = entityManagerFactory.createEntityManager(); +// var entityDAO = new EntityDAO(entityManager); +// +// var tx = entityManager.getTransaction(); +// tx.begin(); +// try { +// entityDAO.createEmployees(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// tx.commit(); +// entityDAO.listEmployees(); +// entityManager.close(); +// System.out.println("... done"); +// } +//} diff --git a/src/main/java/jpa/dao/GenericJpaDao.java b/src/main/java/jpa/dao/GenericJpaDAO.java similarity index 91% rename from src/main/java/jpa/dao/GenericJpaDao.java rename to src/main/java/jpa/dao/GenericJpaDAO.java index 993edcabf..577da3df5 100644 --- a/src/main/java/jpa/dao/GenericJpaDao.java +++ b/src/main/java/jpa/dao/GenericJpaDAO.java @@ -6,12 +6,12 @@ import javax.persistence.EntityManager; import java.util.List; -public class GenericJpaDao { +public class GenericJpaDAO { protected final EntityManager manager; protected final Class objectClass; - protected GenericJpaDao(Class objectClass) { + protected GenericJpaDAO(Class objectClass) { this.manager = EntityManagerHelper.getEntityManager(); this.objectClass = objectClass; } diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index a7b8dfdc4..1d8a538a0 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -5,7 +5,7 @@ import java.util.List; -public class PatientDAO extends GenericJpaDao { +public class PatientDAO extends GenericJpaDAO { public PatientDAO() { super(Patient.class); diff --git a/src/main/java/jpa/dao/ProfessionalDAO.java b/src/main/java/jpa/dao/ProfessionalDAO.java index 397fa4d91..80b1f364c 100644 --- a/src/main/java/jpa/dao/ProfessionalDAO.java +++ b/src/main/java/jpa/dao/ProfessionalDAO.java @@ -1,12 +1,10 @@ package jpa.dao; -import jpa.EntityManagerHelper; import jpa.po.Professional; -import javax.persistence.EntityManager; import java.util.List; -public class ProfessionalDAO extends GenericJpaDao { +public class ProfessionalDAO extends GenericJpaDAO { public ProfessionalDAO() { super(Professional.class); diff --git a/src/main/java/jpa/po/Appointment.java b/src/main/java/jpa/po/Appointment.java index a64a12cd9..15e317fcb 100644 --- a/src/main/java/jpa/po/Appointment.java +++ b/src/main/java/jpa/po/Appointment.java @@ -13,7 +13,6 @@ public class Appointment { private Long id; private String reason; - private String category; private LocalDateTime startingTime; private Professional professional; @@ -21,10 +20,11 @@ public class Appointment { public Appointment() {} - public Appointment(String reason, String category, LocalDateTime startingTime) { + public Appointment(String reason, LocalDateTime startingTime, Patient patient, Professional professional) { this.reason = reason; - this.category = category; this.startingTime = startingTime; + this.patient = patient; + this.professional = professional; } @Id @@ -45,14 +45,6 @@ public void setReason(String reason) { this.reason = reason; } - public String getCategory() { - return category; - } - - public void setCategory(String category) { - this.category = category; - } - public LocalDateTime getStartingTime() { return startingTime; } @@ -84,7 +76,6 @@ public String toString() { return "Appointment{" + "id=" + id + ", reason='" + reason + '\'' + - ", category='" + category + '\'' + ", startingTime=" + startingTime + ", professional=" + professional.toString() + ", patient=" + patient.toString() + From 2b7e217d52c0ac498967cd39cc69f2ff44e73be2 Mon Sep 17 00:00:00 2001 From: Ammar Date: Fri, 9 Sep 2022 15:03:47 +0200 Subject: [PATCH 19/28] [AKAZ] Fixed minor bugs in AppointmentDAO --- src/main/java/jpa/dao/AppointmentDAO.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/jpa/dao/AppointmentDAO.java b/src/main/java/jpa/dao/AppointmentDAO.java index a31cb5536..0356270d4 100644 --- a/src/main/java/jpa/dao/AppointmentDAO.java +++ b/src/main/java/jpa/dao/AppointmentDAO.java @@ -16,14 +16,14 @@ public void addAppointment(String reason, LocalDateTime startingTime, Patient pa manager.persist(new Appointment(reason, startingTime, patient, professional)); } // Access appointments - public List getAppointmentsByProfessionalId(Long id) { - return manager.createQuery("SELECT p FROM Professional p WHERE p.id = :id", Professional.class) + public List getAppointmentsByProfessionalId(Long id) { + return manager.createQuery("SELECT p FROM Appointment p WHERE p.professional.id = :id", Appointment.class) .setParameter("id", id) .getResultList(); } - public List getAppointmentsByPatientId(Long id) { - return manager.createQuery("SELECT p FROM Patient p WHERE p.id = :id", Patient.class) + public List getAppointmentsByPatientId(Long id) { + return manager.createQuery("SELECT p FROM Appointment p WHERE p.patient.id = :id", Appointment.class) .setParameter("id", id) .getResultList(); } From 22dd9037e3f185417cb77f8f8ede10f8fe86d61d Mon Sep 17 00:00:00 2001 From: Ammar Date: Fri, 9 Sep 2022 15:16:07 +0200 Subject: [PATCH 20/28] [AKAZ] Added remove and update methods in AppointmentDAO --- src/main/java/jpa/dao/AppointmentDAO.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/jpa/dao/AppointmentDAO.java b/src/main/java/jpa/dao/AppointmentDAO.java index 0356270d4..02d669409 100644 --- a/src/main/java/jpa/dao/AppointmentDAO.java +++ b/src/main/java/jpa/dao/AppointmentDAO.java @@ -27,5 +27,17 @@ public List getAppointmentsByPatientId(Long id) { .setParameter("id", id) .getResultList(); } - // Create, list, remove and update + + //update + public void updateStartingTime(Long id, LocalDateTime startingTime) { + manager.createQuery("UPDATE Appointment a SET a.startingTime = :startingTime WHERE a.id = :id") + .setParameter("startingTime", startingTime) + .setParameter("id", id); + } + + //remove + public void removeById(Long id) { + manager.createQuery("DELETE FROM Appointment a WHERE a.id = :id") + .setParameter("id", id); + } } From e1f54cb8e236e8adbb39dc4c9ea9a49b41bb23b8 Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Fri, 9 Sep 2022 15:20:52 +0200 Subject: [PATCH 21/28] [HWAN] Added remove and update methods in DAO --- src/main/java/jpa/JpaTest.java | 40 +++++++++++++++------- src/main/java/jpa/dao/PatientDAO.java | 16 +++++---- src/main/java/jpa/dao/ProfessionalDAO.java | 13 ++++++- src/main/java/jpa/po/Patient.java | 6 ++-- 4 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/main/java/jpa/JpaTest.java b/src/main/java/jpa/JpaTest.java index 3c9ff3e44..67f4b4bbb 100644 --- a/src/main/java/jpa/JpaTest.java +++ b/src/main/java/jpa/JpaTest.java @@ -1,8 +1,6 @@ package jpa; -import javax.persistence.EntityManager; -import javax.persistence.EntityTransaction; -import javax.persistence.PersistenceContext; +import jpa.dao.PatientDAO; public class JpaTest { @@ -11,23 +9,41 @@ public class JpaTest { */ public static void main(String[] args) { - EntityManager manager = EntityManagerHelper.getEntityManager(); - EntityTransaction tx = manager.getTransaction(); +// EntityManager manager = EntityManagerHelper.getEntityManager(); +// EntityTransaction tx = manager.getTransaction(); +// tx.begin(); +// +// +// try { +// +// } catch (Exception e) { +// e.printStackTrace(); +// } +// tx.commit(); +// +// +// manager.close(); +// EntityManagerHelper.closeEntityManagerFactory(); +// // factory.close(); + + var manager = EntityManagerHelper.getEntityManager(); + var tx = manager.getTransaction(); + var patientDAO = new PatientDAO(); tx.begin(); - - try { + patientDAO.createPatients("Cambria", "Alpha"); + patientDAO.createPatients("Maria", "Beta"); + patientDAO.createPatients("Jean", "Citron"); + + patientDAO.getPatientList().forEach(System.out::println); + System.out.println(patientDAO.getPatientByName("Maria", "Beta")); } catch (Exception e) { e.printStackTrace(); } tx.commit(); - - manager.close(); - EntityManagerHelper.closeEntityManagerFactory(); - // factory.close(); + System.out.println("done ..."); } - } diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index 1d8a538a0..f1887b761 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -37,18 +37,20 @@ public List getPatientList() { // Remove queries public void removePatientByName(String firstName, String lastName) { - + this.manager.createQuery("delete from Patient p where p.firstName = :firstName and p.lastName = :lastName") + .setParameter("lastName", lastName) + .setParameter("firstName", firstName); } // Update queries - public void addAppointmentToPatient(String firstName, String lastName, Appointment appointment) { - - } - - public void removeAppointmentToPatient(String firstName, String lastName, Long appointmentId) { - + this.manager.createQuery("delete from Appointment app " + + "where app.id = :id and app.patient.lastName = :lastName " + + "and app.patient.firstName = :firstName") + .setParameter("id", appointmentId) + .setParameter("lastName", lastName) + .setParameter("firstName", firstName); } public static void main(String[] args) { diff --git a/src/main/java/jpa/dao/ProfessionalDAO.java b/src/main/java/jpa/dao/ProfessionalDAO.java index 80b1f364c..982e04746 100644 --- a/src/main/java/jpa/dao/ProfessionalDAO.java +++ b/src/main/java/jpa/dao/ProfessionalDAO.java @@ -10,10 +10,14 @@ public ProfessionalDAO() { super(Professional.class); } + // Create + public void createProfessional(String firstName, String lastName) { manager.persist(new Professional(firstName, lastName)); } + // Get + public Professional getPatientByName(String firstName, String lastName) { return manager .createQuery("SELECT p FROM Professional p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName", Professional.class) @@ -28,5 +32,12 @@ public List listProfessionals() { .createQuery("SELECT p FROM Patient p", Professional.class) .getResultList(); } - // Create, list, remove and update + + // Remove queries + + public void removeProfessionalByName(String firstName, String lastName) { + this.manager.createQuery("delete from Professional p where p.firstName = :firstName and p.lastName = :lastName") + .setParameter("lastName", lastName) + .setParameter("firstName", firstName); + } } diff --git a/src/main/java/jpa/po/Patient.java b/src/main/java/jpa/po/Patient.java index 0f8cd75b3..63ed37ac4 100644 --- a/src/main/java/jpa/po/Patient.java +++ b/src/main/java/jpa/po/Patient.java @@ -10,7 +10,6 @@ public class Patient { private String firstName; private List appointments; - @ManyToOne private Professional professional; public Patient() { @@ -57,11 +56,12 @@ public void setAppointments(List appointments) { this.appointments = appointments; } - public Professional getProfessionals() { + @ManyToOne + public Professional getProfessional() { return professional; } - public void setProfessionals(Professional professional) { + public void setProfessional(Professional professional) { this.professional = professional; } From 77e38fd6820719c40adb9428a7d72efbb953858c Mon Sep 17 00:00:00 2001 From: nep-nep327 <91326644+nep-nep327@users.noreply.github.com> Date: Fri, 9 Sep 2022 15:31:15 +0200 Subject: [PATCH 22/28] [HWAN] Added Child to represent inheritance --- README.md | 3 +++ src/main/java/jpa/po/Child.java | 34 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/java/jpa/po/Child.java diff --git a/README.md b/README.md index c03389e39..019f86401 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,9 @@ Todo: - [x] connect to mysql server (Q4) - [ ] design PO and DAO (Q5, but also review of 1, 2, 3) + - [x] Queries (DAO impl) + - [x] Inheritance + - [ ] Named queries - [ ] N+1 select problem And review for coding style, code structure and tests \ No newline at end of file diff --git a/src/main/java/jpa/po/Child.java b/src/main/java/jpa/po/Child.java new file mode 100644 index 000000000..2dde7a824 --- /dev/null +++ b/src/main/java/jpa/po/Child.java @@ -0,0 +1,34 @@ +package jpa.po; + +import javax.persistence.Entity; + +@Entity +public class Child extends Patient { + String parentName; + Integer age; + + public Child() {} + + public Child(String firstName, String lastName, String parentName, Integer age) { + super(firstName, lastName); + this.parentName = parentName; + this.age = age; + } + + + public String getParentName() { + return parentName; + } + + public void setParentName(String parentName) { + this.parentName = parentName; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } +} From 20641d3f7c394b4feb4eaa17bd3213ba41bcd01b Mon Sep 17 00:00:00 2001 From: Ammar Date: Sun, 11 Sep 2022 08:58:01 +0200 Subject: [PATCH 23/28] [AKAZ] v0 of ChildDAO --- pom.xml | 7 ++-- src/main/java/jpa/dao/ChildDAO.java | 47 +++++++++++++++++++++++++++ src/main/java/jpa/dao/PatientDAO.java | 4 --- 3 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 src/main/java/jpa/dao/ChildDAO.java diff --git a/pom.xml b/pom.xml index a3015a829..5db586a8d 100644 --- a/pom.xml +++ b/pom.xml @@ -8,8 +8,8 @@ 0.0.1-SNAPSHOT - 1.11 - 1.11 + 11 + 11 @@ -37,8 +37,5 @@ 8.0.28 - - diff --git a/src/main/java/jpa/dao/ChildDAO.java b/src/main/java/jpa/dao/ChildDAO.java new file mode 100644 index 000000000..0fff7f8bb --- /dev/null +++ b/src/main/java/jpa/dao/ChildDAO.java @@ -0,0 +1,47 @@ +package jpa.dao; + +import jpa.po.Child; + +import java.util.List; + +public class ChildDAO extends GenericJpaDAO{ + + public ChildDAO(Class objectClass) { + super(objectClass); + } + + public void createChild(String firstName, String lastName, String parentName, Integer age) { + manager.persist(new Child(firstName, lastName, parentName, age)); + } + + public Child getChildByName(String firstName, String lastName) { + return manager + .createQuery("SELECT c FROM Child c WHERE c.lastName LIKE :lastName " + + "AND c.firstName LIKE :firstName", Child.class) + .setParameter("firstName", firstName) + .setParameter("lastName", lastName) + .getResultList() + .get(0); + } + + public List getChildList() { + return manager + .createQuery("SELECT c FROM Child c", Child.class) + .getResultList(); + } + + public void removeChildByName(String firstName, String lastName) { + this.manager.createQuery("delete from Child c where c.firstName = :firstName and c.lastName = :lastName") + .setParameter("lastName", lastName) + .setParameter("firstName", firstName); + } + + public void removeAppointmentToPatient(String firstName, String lastName, Long appointmentId) { + this.manager.createQuery("delete from Appointment app " + + "where app.id = :id and app.patient.lastName = :lastName " + + "and app.patient.firstName = :firstName") + .setParameter("id", appointmentId) + .setParameter("lastName", lastName) + .setParameter("firstName", firstName); + } +} diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index f1887b761..5984240a0 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -52,8 +52,4 @@ public void removeAppointmentToPatient(String firstName, String lastName, Long a .setParameter("lastName", lastName) .setParameter("firstName", firstName); } - - public static void main(String[] args) { - } - } From 4f46963afc1778ea441a6622cfb357812e627ee1 Mon Sep 17 00:00:00 2001 From: Ammar Date: Mon, 12 Sep 2022 09:27:18 +0200 Subject: [PATCH 24/28] [AKAZ] Minor changes --- src/main/java/jpa/JpaTest.java | 21 ++--------- src/main/java/jpa/dao/ChildDAO.java | 4 +- src/main/java/jpa/dao/EntityDAO.java | 55 ---------------------------- src/main/java/jpa/po/Child.java | 16 ++++++++ 4 files changed, 21 insertions(+), 75 deletions(-) delete mode 100644 src/main/java/jpa/dao/EntityDAO.java diff --git a/src/main/java/jpa/JpaTest.java b/src/main/java/jpa/JpaTest.java index 67f4b4bbb..035219e3f 100644 --- a/src/main/java/jpa/JpaTest.java +++ b/src/main/java/jpa/JpaTest.java @@ -1,5 +1,6 @@ package jpa; +import jpa.dao.ChildDAO; import jpa.dao.PatientDAO; public class JpaTest { @@ -8,32 +9,16 @@ public class JpaTest { * @param args */ public static void main(String[] args) { - -// EntityManager manager = EntityManagerHelper.getEntityManager(); -// EntityTransaction tx = manager.getTransaction(); -// tx.begin(); -// -// -// try { -// -// } catch (Exception e) { -// e.printStackTrace(); -// } -// tx.commit(); -// -// -// manager.close(); -// EntityManagerHelper.closeEntityManagerFactory(); -// // factory.close(); - var manager = EntityManagerHelper.getEntityManager(); var tx = manager.getTransaction(); var patientDAO = new PatientDAO(); + var childDAO = new ChildDAO(); tx.begin(); try { patientDAO.createPatients("Cambria", "Alpha"); patientDAO.createPatients("Maria", "Beta"); patientDAO.createPatients("Jean", "Citron"); + childDAO.createChild("firstChild", "good", "parent", 12); patientDAO.getPatientList().forEach(System.out::println); diff --git a/src/main/java/jpa/dao/ChildDAO.java b/src/main/java/jpa/dao/ChildDAO.java index 0fff7f8bb..ed30cee12 100644 --- a/src/main/java/jpa/dao/ChildDAO.java +++ b/src/main/java/jpa/dao/ChildDAO.java @@ -6,8 +6,8 @@ public class ChildDAO extends GenericJpaDAO{ - public ChildDAO(Class objectClass) { - super(objectClass); + public ChildDAO() { + super(Child.class); } public void createChild(String firstName, String lastName, String parentName, Integer age) { diff --git a/src/main/java/jpa/dao/EntityDAO.java b/src/main/java/jpa/dao/EntityDAO.java deleted file mode 100644 index b513c4091..000000000 --- a/src/main/java/jpa/dao/EntityDAO.java +++ /dev/null @@ -1,55 +0,0 @@ -//package jpa.dao; -// -//import jpa.domain.Department; -//import jpa.domain.Employee; -// -//import javax.persistence.EntityManager; -//import javax.persistence.Persistence; -// -//public class EntityDAO { -// private EntityManager manager; -// -// public EntityDAO(EntityManager manager) { -// this.manager = manager; -// } -// -// public void createEmployees() { -// var numOfEmployees = manager -// .createQuery("Select a From Employee a", Employee.class) -// .getResultList().size(); -// if (numOfEmployees == 0) { -// var department = new Department("java"); -// manager.persist(department); -// manager.persist(new Employee("Jakab Gipsz",department)); -// manager.persist(new Employee("Captain Nemo",department)); -// } -// } -// -// public void listEmployees() { -// var listResults = manager -// .createQuery("Select a From Employee a", Employee.class) -// .getResultList(); -// System.out.println("num of employees:" + listResults.size()); -// for (var next : listResults) { -// System.out.println("next employee: " + next); -// } -// } -// -// public static void main(String[] args) { -// var entityManagerFactory = Persistence.createEntityManagerFactory("dev"); -// var entityManager = entityManagerFactory.createEntityManager(); -// var entityDAO = new EntityDAO(entityManager); -// -// var tx = entityManager.getTransaction(); -// tx.begin(); -// try { -// entityDAO.createEmployees(); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// tx.commit(); -// entityDAO.listEmployees(); -// entityManager.close(); -// System.out.println("... done"); -// } -//} diff --git a/src/main/java/jpa/po/Child.java b/src/main/java/jpa/po/Child.java index 2dde7a824..76bfc12c8 100644 --- a/src/main/java/jpa/po/Child.java +++ b/src/main/java/jpa/po/Child.java @@ -1,12 +1,28 @@ package jpa.po; import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; @Entity public class Child extends Patient { + + Long id; String parentName; Integer age; + @Override + @Id + @GeneratedValue + public Long getId() { + return id; + } + + @Override + public void setId(Long id) { + this.id = id; + } + public Child() {} public Child(String firstName, String lastName, String parentName, Integer age) { From 7b38d107bab2e081d487005f39e4a57348f147ef Mon Sep 17 00:00:00 2001 From: Ammar Date: Mon, 12 Sep 2022 10:15:20 +0200 Subject: [PATCH 25/28] [AKAZ] Return type is now a list --- src/main/java/jpa/dao/ChildDAO.java | 6 +++--- src/main/java/jpa/dao/PatientDAO.java | 5 ++--- src/main/java/jpa/dao/ProfessionalDAO.java | 5 ++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/jpa/dao/ChildDAO.java b/src/main/java/jpa/dao/ChildDAO.java index ed30cee12..3837fac3c 100644 --- a/src/main/java/jpa/dao/ChildDAO.java +++ b/src/main/java/jpa/dao/ChildDAO.java @@ -14,14 +14,14 @@ public void createChild(String firstName, String lastName, String parentName, In manager.persist(new Child(firstName, lastName, parentName, age)); } - public Child getChildByName(String firstName, String lastName) { + // We think that returning a list is better than returning a single element from a list. + public List getChildByName(String firstName, String lastName) { return manager .createQuery("SELECT c FROM Child c WHERE c.lastName LIKE :lastName " + "AND c.firstName LIKE :firstName", Child.class) .setParameter("firstName", firstName) .setParameter("lastName", lastName) - .getResultList() - .get(0); + .getResultList(); } public List getChildList() { diff --git a/src/main/java/jpa/dao/PatientDAO.java b/src/main/java/jpa/dao/PatientDAO.java index 5984240a0..acd454937 100644 --- a/src/main/java/jpa/dao/PatientDAO.java +++ b/src/main/java/jpa/dao/PatientDAO.java @@ -19,13 +19,12 @@ public void createPatients(String firstName, String lastName) { // Fetch queries - public Patient getPatientByName(String firstName, String lastName) { + public List getPatientByName(String firstName, String lastName) { return manager .createQuery("SELECT p FROM Patient p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName", Patient.class) .setParameter("firstName", firstName) .setParameter("lastName", lastName) - .getResultList() - .get(0); + .getResultList(); } public List getPatientList() { diff --git a/src/main/java/jpa/dao/ProfessionalDAO.java b/src/main/java/jpa/dao/ProfessionalDAO.java index 982e04746..3e88ed3f0 100644 --- a/src/main/java/jpa/dao/ProfessionalDAO.java +++ b/src/main/java/jpa/dao/ProfessionalDAO.java @@ -18,13 +18,12 @@ public void createProfessional(String firstName, String lastName) { // Get - public Professional getPatientByName(String firstName, String lastName) { + public List getPatientByName(String firstName, String lastName) { return manager .createQuery("SELECT p FROM Professional p WHERE p.lastName LIKE :lastName AND p.firstName LIKE :firstName", Professional.class) .setParameter("firstName", firstName) .setParameter("lastName", lastName) - .getResultList() - .get(0); + .getResultList(); } public List listProfessionals() { From 9572bc3f572f381ff34d4adfa49ee507efdd63ac Mon Sep 17 00:00:00 2001 From: Ammar96399 <50889372+Ammar96399@users.noreply.github.com> Date: Sun, 25 Sep 2022 09:12:00 +0200 Subject: [PATCH 26/28] Update README.md --- README.md | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 019f86401..be561afce 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,29 @@ -# Template de projet pour le TP JPA 2021 UniR +Report TP1 - TAA: -## Lab 1 +## Presentation: -Todo: +This repository is the code of the first lab of the class TAA. It was written by Ammar Kazem and Heming Wang during our second year of master's degree in software engineering at the University of Rennes 1. -- [x] connect to mysql server (Q4) -- [ ] design PO and DAO (Q5, but also review of 1, 2, 3) - - [x] Queries (DAO impl) - - [x] Inheritance - - [ ] Named queries -- [ ] N+1 select problem +The goal of this lab was to create a small back-end application with "Models" and the "DAO" that goes with it. We created a very basic representation the famous website "Doctolib". -And review for coding style, code structure and tests \ No newline at end of file +You can see a representation of our models and the links between them in the image (1). + +![2022-09-25-09-03-36-image](https://user-images.githubusercontent.com/50889372/192132459-506adbd7-9ce6-4dbd-9bbd-9fb547950f59.png) + +*Image (1) : Class diagram* + +For the DAOs we created a generic DAO with the basic methods from which the other DAOs inherited. Requests were written in JAP. + +## How to run + +To run the project you first need to start the hsql server like this: + +Windows: + +`.\run-hsqldb-server.bat` + +Linux / Macos: + +`./run-hsqldb-server.sh` + +After starting the database server you can launch the main class `JPATest.java` with your ide or from a terminal. Methods have to be called manually in the main class. A small scenario was written but feel free to add calls to it. From b76775560abf5ac232d43e8251bfc7314c6322fd Mon Sep 17 00:00:00 2001 From: Ammar96399 <50889372+Ammar96399@users.noreply.github.com> Date: Sun, 25 Sep 2022 09:13:12 +0200 Subject: [PATCH 27/28] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index be561afce..dd9102edb 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,11 @@ The goal of this lab was to create a small back-end application with "Models" an You can see a representation of our models and the links between them in the image (1). -![2022-09-25-09-03-36-image](https://user-images.githubusercontent.com/50889372/192132459-506adbd7-9ce6-4dbd-9bbd-9fb547950f59.png) +![image](https://user-images.githubusercontent.com/50889372/192132477-9ab58e95-0b87-4bc7-9d03-ea11c18d57e3.png) *Image (1) : Class diagram* + For the DAOs we created a generic DAO with the basic methods from which the other DAOs inherited. Requests were written in JAP. ## How to run From ec324728907a9fbb65afe65d70574b093a5341d7 Mon Sep 17 00:00:00 2001 From: Ammar96399 <50889372+Ammar96399@users.noreply.github.com> Date: Sun, 25 Sep 2022 09:13:28 +0200 Subject: [PATCH 28/28] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dd9102edb..525cc6dd6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Report TP1 - TAA: +# Report TP1 - TAA: ## Presentation: