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..ac95026f --- /dev/null +++ b/src/main/java/Director.java @@ -0,0 +1,73 @@ +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..9b55dbda --- /dev/null +++ b/src/main/java/Film.java @@ -0,0 +1,61 @@ +import jakarta.persistence.*; + +import java.util.List; + +@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; + } + + //LĂ€gg till en ny film + public static void addFilm(EntityManager em, String title, Director director) { + Film film = new Film(); + film.setTitle(title); + film.setDirector(director); + em.persist(film); + System.out.println("Film tillagd: " + title); + } + //HĂ€mta alla filmer + public static List getAllFilms(EntityManager em) { + return em.createQuery("FROM Film", Film.class).getResultList(); + } + + //HĂ€mta filmer regisserade av en viss regissör + public static List getFilmsByDirector(EntityManager em, Director director) { + return em.createQuery("FROM Film f WHERE f.director = :director", Film.class) + .setParameter("director", director) + .getResultList(); + } + + +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 00000000..f957efcd --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,63 @@ +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 -> { + //Skapa regissör för test + Director director = new Director(); + director.setName("Christopher Bolan"); + director.setCountry("United States"); + director.setBirthYear(1970); + em.persist(director); + + //Testa att lĂ€gga till filmer + Film.addFilm(em, "The Dirk Knight", director); + Film.addFilm(em, "Inception", director); + + //Testa att hĂ€mta alla filmer + System.out.println("\nAlla filmer:"); + List films = Film.getAllFilms(em); + films.forEach(film -> System.out.println(film.getTitle())); + + //Testa att hĂ€mta filmer av en viss regissör + System.out.println("\nAlla filmer av regissör:"); + List filmsByDirector = Film.getFilmsByDirector(em, director); + filmsByDirector.forEach(film -> System.out.println(film.getTitle())); + + //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); + + }); + + } + + } +}