Skip to content
Snippets Groups Projects
Commit 2d404ea2 authored by opitzju's avatar opitzju
Browse files

Entitäten implementiert

parent f8c12aa3
No related branches found
No related tags found
No related merge requests found
Showing
with 260 additions and 28 deletions
...@@ -43,4 +43,4 @@ atlassian-ide-plugin.xml ...@@ -43,4 +43,4 @@ atlassian-ide-plugin.xml
# Project Specific # # Project Specific #
#################### ####################
/src/main/resources/config.properties /src/main/resources/META-INF/persistence.xml
\ No newline at end of file \ No newline at end of file
lombok.var.flagUsage = error
\ No newline at end of file
...@@ -30,9 +30,14 @@ ...@@ -30,9 +30,14 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId> <artifactId>hibernate-core-jakarta</artifactId>
<version>5.6.1.Final</version> <version>5.6.1.Final</version>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package edu.hsh.dbs2.imdb; package edu.hsh.dbs2.imdb;
import javax.swing.SwingUtilities;
import edu.hsh.dbs2.imdb.gui.SearchMovieDialog; import edu.hsh.dbs2.imdb.gui.SearchMovieDialog;
import edu.hsh.dbs2.imdb.gui.SearchMovieDialogCallback; import edu.hsh.dbs2.imdb.gui.SearchMovieDialogCallback;
import javax.swing.*;
public class Starter { public class Starter {
/** /**
......
package edu.hsh.dbs2.imdb.entity;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import jakarta.persistence.*;
import java.util.Set;
@Getter
@Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Entity
@Table(name = "Genre")
public class Genre {
private static final String SEQUENCE_NAME = "seq_genre";
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_NAME)
@SequenceGenerator(name = SEQUENCE_NAME, allocationSize = 10)
@EqualsAndHashCode.Include
private Long id;
@Column(name = "Genre", nullable = false, unique = true)
private String genre;
@ManyToMany
@JoinTable(name = "MovieGenre", joinColumns = @JoinColumn(name = "GenreID"),
inverseJoinColumns = @JoinColumn(name = "MovieID"))
private Set<Movie> movies;
}
package edu.hsh.dbs2.imdb.entity;
import jakarta.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.Set;
@Getter
@Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Entity
@Table(name = "Movie")
public class Movie {
private static final String SEQUENCE_NAME = "seq_movie";
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_NAME)
@SequenceGenerator(name = SEQUENCE_NAME, allocationSize = 10)
@EqualsAndHashCode.Include
private Long id;
@Column(name = "Title", nullable = false)
private String title;
@Column(name = "Year")
private Integer year;
@Column(name = "Type")
@Enumerated(EnumType.STRING)
private MovieType type;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "movie")
private Set<MovieCharacter> characters;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "MovieGenre", joinColumns = @JoinColumn(name = "MovieID"),
inverseJoinColumns = @JoinColumn(name = "GenreID"))
private Set<Genre> genre;
}
package edu.hsh.dbs2.imdb.entity;
import jakarta.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Entity
@Table(name = "MovieCharacter")
public class MovieCharacter {
private static final String SEQUENCE_NAME = "seq_character";
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_NAME)
@SequenceGenerator(name = SEQUENCE_NAME, allocationSize = 10)
@EqualsAndHashCode.Include
private Long id;
@Column(name = "Character", nullable = false)
private String character;
@Column(name = "Alias")
private String alias;
@Column(name = "Position")
private Integer position;
@ManyToOne
@JoinColumn(name = "Actor")
private Person actor;
@ManyToOne
@JoinColumn(name = "Movie", nullable = false)
private Movie movie;
}
package edu.hsh.dbs2.imdb.entity;
public enum MovieType {
V, T, C, G;
}
package edu.hsh.dbs2.imdb.entity;
import jakarta.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Entity
@Table(name = "Person")
public class Person {
private static final String SEQUENCE_NAME = "seq_person";
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_NAME)
@SequenceGenerator(name = SEQUENCE_NAME, allocationSize = 10)
@EqualsAndHashCode.Include
private Long id;
@Column(name = "Name", nullable = false, unique = true)
private String name;
@Column(name = "Sex")
@Enumerated(EnumType.STRING)
private Sex sex;
}
package edu.hsh.dbs2.imdb.entity;
public enum Sex {
f, m;
}
DROP TABLE MovieGenre;
DROP TABLE MovieCharacter;
DROP TABLE Person;
DROP TABLE Genre;
DROP TABLE Movie;
DROP SEQUENCE seq_movie;
DROP SEQUENCE seq_genre;
DROP SEQUENCE seq_person;
DROP SEQUENCE seq_character;
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">
<persistence-unit name="edu.hsh.dbs2.imdb">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="jakarta.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:db01"/>
<property name="jakarta.persistence.jdbc.user" value=""/>
<property name="jakarta.persistence.jdbc.password" value=""/>
<property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create" />
<property name="jakarta.persistence.schema-generation.create-source" value="script"/>
<property name="jakarta.persistence.schema-generation.drop-source" value="script"/>
<property name="jakarta.persistence.schema-generation.create-script-source" value="src/main/resources/Schema.sql"/>
<property name="jakarta.persistence.schema-generation.drop-script-source" value="src/main/resources/DropSchema.sql"/>
<property name="hibernate.check_nullability" value="true"/>
</properties>
</persistence-unit>
</persistence>
\ No newline at end of file
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="movie">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@dboracleserv.inform.hs-hannover.de:1521/db01"/>
<property name="javax.persistence.jdbc.user" value=""/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<!--
values:
validate: validate the schema, makes no changes to the database.
update: update the schema.
create: creates the schema, destroying previous data.
create-drop: drop the schema when the SessionFactory is closed explicitly, typically when the application is stopped.
none: does nothing
-->
</properties>
</persistence-unit>
</persistence>
\ No newline at end of file
CREATE TABLE Movie (ID INT NOT NULL, Title VARCHAR(255) NOT NULL, Year INT, Type CHAR(1), PRIMARY KEY (ID));
CREATE TABLE Genre (ID INT NOT NULL, Genre VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (ID));
CREATE TABLE Person (ID INT NOT NULL, Name VARCHAR(255) NOT NULL, Sex CHAR(1), PRIMARY KEY (ID));
CREATE TABLE MovieCharacter (ID INT NOT NULL, Character VARCHAR(255) NOT NULL, Alias VARCHAR(255), Position INT, Movie INT NOT NULL, Actor INT, PRIMARY KEY (ID), FOREIGN KEY (Movie) REFERENCES Movie(ID), FOREIGN KEY (Actor) REFERENCES Person(ID), CONSTRAINT MOVIE_CHAR_UNIQUE UNIQUE(Character, Movie, Actor));
CREATE TABLE MovieGenre (MovieID INT NOT NULL, GenreID INT NOT NULL, CONSTRAINT MOVIEGENRE_PK PRIMARY KEY (MovieID,GenreID), FOREIGN KEY (MovieID) REFERENCES Movie(ID), FOREIGN KEY (GenreID) REFERENCES Genre(ID));
CREATE SEQUENCE seq_movie INCREMENT BY 10;
CREATE SEQUENCE seq_genre INCREMENT BY 10;
CREATE SEQUENCE seq_person INCREMENT BY 10;
CREATE SEQUENCE seq_character INCREMENT BY 10;
\ No newline at end of file
package edu.hsh.dbs2.imdb;
import edu.hsh.dbs2.imdb.entity.Genre;
import edu.hsh.dbs2.imdb.entity.Person;
import edu.hsh.dbs2.imdb.entity.Sex;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.persistence.PersistenceException;
import lombok.Cleanup;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestDB {
private static EntityManagerFactory sessionFactory;
@BeforeClass
public static void setUp() {
sessionFactory = Persistence.createEntityManagerFactory("edu.hsh.dbs2.imdb");
}
@AfterClass
public static void tearDown() {
sessionFactory.close();
}
@Test
public void testDB() {
@Cleanup var em = sessionFactory.createEntityManager();
em.getTransaction().begin();
var genre = new Genre();
genre.setGenre("testGenre");
em.persist(genre);
em.flush();
em.getTransaction().commit();
var result = em.createQuery("from Genre", Genre.class).getSingleResult();
assertEquals("testGenre", result.getGenre());
assertEquals(1L, genre.getId().longValue());
}
@Test(expected = PersistenceException.class)
public void testNullNotPermitted() {
@Cleanup var em = sessionFactory.createEntityManager();
var person = new Person();
person.setSex(Sex.f);
em.getTransaction().begin();
em.persist(person);
em.flush();
em.getTransaction().commit();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment