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. diff --git a/src/main/java/Director.java b/src/main/java/Director.java new file mode 100644 index 00000000..f34554c3 --- /dev/null +++ b/src/main/java/Director.java @@ -0,0 +1,76 @@ +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 films = new HashSet<>(); + + private String name; + private String country; + private int birthYear; + @Column(nullable = true) + private Integer yearOfDeath; + + + + public Set getFilms() { + return films; + } + + public void setFilms(Set films) { + this.films = films; + } + + public Integer getYearOfDeath() { + return yearOfDeath; + } + + public void setYearOfDeath(Integer 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; + } + + +} + + diff --git a/src/main/java/Film.java b/src/main/java/Film.java new file mode 100644 index 00000000..6beaac82 --- /dev/null +++ b/src/main/java/Film.java @@ -0,0 +1,39 @@ +import jakarta.persistence.*; + +@Entity +public class Film { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String title; + @ManyToOne + @JoinColumn(name = "director_id") + private Director director; + + public Director getDirector() { + return director; + } + + public void setDirector(Director 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..d6254896 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +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 { + public static void main(String[] args) { + + + final PersistenceConfiguration cfg = new HibernatePersistenceConfiguration("emf") + .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(Film.class, Director.class); + try (EntityManagerFactory emf = cfg.createEntityManagerFactory()) { + emf.runInTransaction(em -> { + //If no Films 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); + + }); + + } + + } +}