Skip to content

Submission for Entity Manager lab. #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,7 @@ fabric.properties
# Sonarlint plugin
.idea/sonarlint

# Compiled bytecode
/target/

# End of https://www.gitignore.io/api/intellij
17 changes: 17 additions & 0 deletions .idea/Maven.JPA.EntityManager.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions .idea/dataSources.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/sqldialects.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

File renamed without changes.
26 changes: 25 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,29 @@
<artifactId>jpaentity</artifactId>
<version>1.0-SNAPSHOT</version>


<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.10.Final</version>
</dependency>
</dependencies>
</project>
96 changes: 96 additions & 0 deletions src/main/java/entities/Actor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package entities;


import com.sun.istack.NotNull;

import javax.persistence.*;
import java.time.LocalDate;
import java.util.Set;

@Entity
//@Table(
// name = "actor",
// uniqueConstraints = {@UniqueConstraint(columnNames = {"birthDate", "firstName", "lastName"})}
//)
public class Actor
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String firstName;
@NotNull
private String lastName;
private String gender;
@NotNull
private LocalDate birthDate;
private String nationality;
@ManyToMany(cascade =
{CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
name = "movie_cast",
joinColumns = {@JoinColumn(name = "actor_id")},
inverseJoinColumns = {@JoinColumn(name = "movie_id")}
)
private Set<Movie> filmography;

public Actor()
{
}

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;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this.gender = gender;
}

public LocalDate getBirthDate() {
return birthDate;
}

public void setBirthDate(LocalDate birthDate) {
this.birthDate = birthDate;
}

public String getNationality() {
return nationality;
}

public void setNationality(String nationality) {
this.nationality = nationality;
}

public Set<Movie> getFilmography() {
return filmography;
}

public void setFilmography(Set<Movie> filmography) {
this.filmography = filmography;
}
}
105 changes: 105 additions & 0 deletions src/main/java/entities/Movie.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package entities;


import com.sun.istack.NotNull;

import javax.persistence.*;
import java.time.LocalDate;
import java.util.Objects;
import java.util.Set;

@Entity
//@Table(
// name = "movie",
// uniqueConstraints = {@UniqueConstraint(columnNames = {"title", "releaseDate"})}
//)
public class Movie
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String title;
@NotNull
private LocalDate releaseDate;
private String director;
@ManyToMany(cascade =
{CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
name = "movie_cast",
joinColumns = {@JoinColumn(name = "movie_id")},
inverseJoinColumns = {@JoinColumn(name = "actor_id")}
)
private Set<Actor> cast;
String summary;

public Movie()
{
}

public Long getId()
{
return this.id;
}

public void setId(Long id)
{
this.id = id;
}

public String getTitle()
{
return this.title;
}

public void setTitle(String title)
{
this.title = title;
}

public LocalDate getReleaseDate()
{
return this.releaseDate;
}

public void setReleaseDate(LocalDate releaseDate)
{
this.releaseDate = releaseDate;
}

public String getDirector()
{
return this.director;
}

public void setDirector(String director)
{
this.director = director;
}

public Set<Actor> getCast()
{
return this.cast;
}

public void setCast(Set<Actor> cast)
{
this.cast = cast;
}

public String getSummary()
{
return this.summary;
}

public void setSummary(String summary)
{
this.summary = summary;
}

@Override
public int hashCode()
{
return Objects.hash(this.getTitle());
}
}
94 changes: 94 additions & 0 deletions src/main/java/services/ActorService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package services;

import entities.Actor;
import entities.Movie;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class ActorService
{
EntityManagerFactory emf;
EntityManager em;
List<Actor> actorList;

public ActorService()
{
emf = Persistence.createEntityManagerFactory("movieDB");
em = emf.createEntityManager();
actorList = new ArrayList<>();
}

public List<Actor> findAll()
{
return em.createQuery("SELECT a FROM Actor a", Actor.class).getResultList();
}

public Actor findById(Long id)
{
return em.find(Actor.class, id);
}

public Actor create(Actor actor)
{
em.getTransaction().begin();
em.persist(actor);
em.getTransaction().commit();

return actor;
}

public Actor create(Long id, String firstName, String lastName, String gender, LocalDate birthDate,
String nationality, Set<Movie> filmography)
{
Actor createdActor = new Actor();
createdActor.setId(id);
createdActor.setFirstName(firstName);
createdActor.setLastName(lastName);
createdActor.setGender(gender);
createdActor.setBirthDate(birthDate);
createdActor.setNationality(nationality);
createdActor.setFilmography(filmography);
em.getTransaction().begin();
em.persist(createdActor);
em.getTransaction().commit();

return createdActor;
}

public void update(Long id, Actor actor)
{
em.getTransaction().begin();
Actor persistentActor = em.find(Actor.class, id);
persistentActor.setFirstName(actor.getFirstName());
persistentActor.setLastName(actor.getLastName());
persistentActor.setGender(actor.getGender());
persistentActor.setBirthDate(actor.getBirthDate());
persistentActor.setNationality(actor.getNationality());
persistentActor.setFilmography(actor.getFilmography());
em.getTransaction().commit();
}

public void delete(Long id)
{
Actor actorToRemove = em.find(Actor.class, id);
if(actorToRemove != null)
{
em.getTransaction().begin();
em.remove(actorToRemove);
em.getTransaction().commit();
}
}

public void delete(Actor actor)
{
em.getTransaction().begin();
em.remove(actor);
em.getTransaction().commit();
}
}
Empty file.
Loading