From cd5855350223bc6240d112acfe9c6ed2760c65a5 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 09:57:05 +0000 Subject: [PATCH 1/7] add deadline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5150e50f..05def9a9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/_uV8Mn8f) # 📘 Projektarbete: JPA + Hibernate med GitHub-flöde Projektet genomförs som antingen en Java CLI-applikation eller med hjälp av JavaFX om ni vill ha ett grafiskt gränssnitt. From f043eb4c25aeb91357754a7f20fb7a85af8b1a4e Mon Sep 17 00:00:00 2001 From: Linnea Vardal Date: Tue, 16 Dec 2025 10:00:21 +0100 Subject: [PATCH 2/7] Add Main and Film class. Add persistenceconfiguration in Main. Add Entity in Film. Co-authored-by: Mattias Barth mattias.barth@gmail.com EdvinSandgren 229709012+EdvinSandgren@users.noreply.github.com johanhiths Johan.hietala@iths.se --- src/main/java/Film.java | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/java/Main.java | 23 +++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/main/java/Film.java create mode 100644 src/main/java/Main.java diff --git a/src/main/java/Film.java b/src/main/java/Film.java new file mode 100644 index 00000000..82eb775d --- /dev/null +++ b/src/main/java/Film.java @@ -0,0 +1,40 @@ +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity +public class Film { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + String title; + String director; + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 00000000..5b7b0822 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,23 @@ +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.PersistenceConfiguration; +import org.hibernate.jpa.HibernatePersistenceConfiguration; + +import java.util.List; + +public class Main { + static void main() { + + + final PersistenceConfiguration cfg = new HibernatePersistenceConfiguration("emf") + .jdbcUrl("jdbc:mysql://localhost:3306/jpa") + .jdbcUsername("root") + .jdbcPassword("root") + .property("hibernate.hbm2ddl.auto", "update") + .property("hibernate.show_sql", "true") + .property("hibernate.format_sql", "true") + .property("hibernate.highlight_sql", "true") + .managedClasses(); + + +} +} From 86c2ac25f05b24abc12df9276ff782701d0f9a68 Mon Sep 17 00:00:00 2001 From: Linnea Vardal Date: Tue, 16 Dec 2025 10:51:43 +0100 Subject: [PATCH 3/7] Add Director Class with getters and setters. Co-authored-by: Mattias Barth mattias.barth@gmail.com EdvinSandgren 229709012+EdvinSandgren@users.noreply.github.com johanhiths Johan.hietala@iths.se --- src/main/java/Director.java | 60 +++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/main/java/Director.java diff --git a/src/main/java/Director.java b/src/main/java/Director.java new file mode 100644 index 00000000..6c05171c --- /dev/null +++ b/src/main/java/Director.java @@ -0,0 +1,60 @@ +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity +public class Director { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + String name; + String country; + int birthYear; + int yearOfDeath; + + public int getYearOfDeath() { + return yearOfDeath; + } + + public void setYearOfDeath(int yearOfDeath) { + this.yearOfDeath = yearOfDeath; + } + + public int getBirthYear() { + return birthYear; + } + + public void setBirthYear(int birthYear) { + this.birthYear = birthYear; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + +} + + From 5c33218e5d96b7f918cf4b9a6a12be06b63b4997 Mon Sep 17 00:00:00 2001 From: Linnea Vardal Date: Tue, 16 Dec 2025 13:13:59 +0100 Subject: [PATCH 4/7] Add entity manager to Main. Co-authored-by: Mattias Barth mattias.barth@gmail.com EdvinSandgren 229709012+EdvinSandgren@users.noreply.github.com johanhiths Johan.hietala@iths.se --- src/main/java/Main.java | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 5b7b0822..d0b5b088 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,23 +1,42 @@ +import jakarta.persistence.Entity; import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; import jakarta.persistence.PersistenceConfiguration; import org.hibernate.jpa.HibernatePersistenceConfiguration; import java.util.List; public class Main { - static void main() { + public static void main(String[] args) { final PersistenceConfiguration cfg = new HibernatePersistenceConfiguration("emf") - .jdbcUrl("jdbc:mysql://localhost:3306/jpa") + .jdbcUrl("jdbc:mysql://localhost:3306/film_database") .jdbcUsername("root") .jdbcPassword("root") .property("hibernate.hbm2ddl.auto", "update") .property("hibernate.show_sql", "true") .property("hibernate.format_sql", "true") .property("hibernate.highlight_sql", "true") - .managedClasses(); + .managedClasses(Film.class, Director.class); + try (EntityManagerFactory emf = cfg.createEntityManagerFactory()) { + emf.runInTransaction(em -> { + //If no Organizations in database, add some + if (em.createQuery("select count(o) from Film o", Long.class) + .getSingleResult() == 0) { + Film film1 = new Film(); + em.persist(film1); + em.flush(); + Film film2 = new Film(); + em.persist(film2); + } + System.out.println("==== Using select query, N + 1 ===="); + em.createQuery("from Film", Film.class) + .getResultList().forEach(System.out::println); + }); -} + } + + } } From c5b0d5ff43f68f3e1be2aaa8625744dae4dd8fbf Mon Sep 17 00:00:00 2001 From: Linnea Vardal Date: Tue, 16 Dec 2025 14:00:01 +0100 Subject: [PATCH 5/7] Add OneToMany in Director Class. Add ManyToOne in Film Class. Co-authored-by: Mattias Barth mattias.barth@gmail.com EdvinSandgren 229709012+EdvinSandgren@users.noreply.github.com johanhiths Johan.hietala@iths.se --- src/main/java/Director.java | 13 +++++++++---- src/main/java/Film.java | 12 +++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/Director.java b/src/main/java/Director.java index 6c05171c..db0ca147 100644 --- a/src/main/java/Director.java +++ b/src/main/java/Director.java @@ -1,14 +1,19 @@ -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; @Entity public class Director { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @OneToMany(mappedBy = "director") + private Set film = new HashSet<>(); + String name; String country; int birthYear; diff --git a/src/main/java/Film.java b/src/main/java/Film.java index 82eb775d..94bf19dd 100644 --- a/src/main/java/Film.java +++ b/src/main/java/Film.java @@ -1,7 +1,4 @@ -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; @Entity public class Film { @@ -10,13 +7,14 @@ public class Film { private Long id; String title; - String director; + @ManyToOne + Director director; - public String getDirector() { + public Director getDirector() { return director; } - public void setDirector(String director) { + public void setDirector(Director director) { this.director = director; } From 3f3262f65223d1016cba98e2c77abab1393c1279 Mon Sep 17 00:00:00 2001 From: Linnea Vardal Date: Tue, 16 Dec 2025 14:25:25 +0100 Subject: [PATCH 6/7] Made yearOfDeath nullable. Co-authored-by: Mattias Barth mattias.barth@gmail.com EdvinSandgren 229709012+EdvinSandgren@users.noreply.github.com johanhiths Johan.hietala@iths.se --- src/main/java/Director.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Director.java b/src/main/java/Director.java index db0ca147..f269f52c 100644 --- a/src/main/java/Director.java +++ b/src/main/java/Director.java @@ -17,6 +17,7 @@ public class Director { String name; String country; int birthYear; + @Column(nullable = true) int yearOfDeath; public int getYearOfDeath() { From 5125f3acb9cb3017cb933123eb38bea74c9c2362 Mon Sep 17 00:00:00 2001 From: Linnea Vardal Date: Wed, 17 Dec 2025 09:20:34 +0100 Subject: [PATCH 7/7] Fixed issues according to Coderabbit. Co-authored-by: Mattias Barth mattias.barth@gmail.com EdvinSandgren 229709012+EdvinSandgren@users.noreply.github.com johanhiths Johan.hietala@iths.se --- src/main/java/Director.java | 24 +++++++++++++++++------- src/main/java/Film.java | 5 +++-- src/main/java/Main.java | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/main/java/Director.java b/src/main/java/Director.java index f269f52c..f34554c3 100644 --- a/src/main/java/Director.java +++ b/src/main/java/Director.java @@ -12,19 +12,29 @@ public class Director { private Long id; @OneToMany(mappedBy = "director") - private Set film = new HashSet<>(); + private Set films = new HashSet<>(); - String name; - String country; - int birthYear; + private String name; + private String country; + private int birthYear; @Column(nullable = true) - int yearOfDeath; + private Integer yearOfDeath; - public int getYearOfDeath() { + + + public Set getFilms() { + return films; + } + + public void setFilms(Set films) { + this.films = films; + } + + public Integer getYearOfDeath() { return yearOfDeath; } - public void setYearOfDeath(int yearOfDeath) { + public void setYearOfDeath(Integer yearOfDeath) { this.yearOfDeath = yearOfDeath; } diff --git a/src/main/java/Film.java b/src/main/java/Film.java index 94bf19dd..6beaac82 100644 --- a/src/main/java/Film.java +++ b/src/main/java/Film.java @@ -6,9 +6,10 @@ public class Film { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - String title; + private String title; @ManyToOne - Director director; + @JoinColumn(name = "director_id") + private Director director; public Director getDirector() { return director; diff --git a/src/main/java/Main.java b/src/main/java/Main.java index d0b5b088..d6254896 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -21,7 +21,7 @@ public static void main(String[] args) { .managedClasses(Film.class, Director.class); try (EntityManagerFactory emf = cfg.createEntityManagerFactory()) { emf.runInTransaction(em -> { - //If no Organizations in database, add some + //If no Films in database, add some if (em.createQuery("select count(o) from Film o", Long.class) .getSingleResult() == 0) { Film film1 = new Film();