From d2a4341d9763cf1c062b75b31cf597af8601aecc Mon Sep 17 00:00:00 2001 From: fanatixan Date: Sun, 4 Nov 2018 17:29:22 +0100 Subject: [PATCH] bael-2190 - JPA many-to-many: adding tests and changing package --- .../{extracolumn => }/model/Course.java | 6 ++- .../{extracolumn => }/model/CourseRating.java | 6 ++- .../model/CourseRatingKey.java | 2 +- .../model/CourseRegistration.java | 8 ++- .../{extracolumn => }/model/Student.java | 6 ++- .../manytomany/ManyToManyIntegrationTest.java | 24 +++++++++ .../ManyToManyTestConfiguration.java | 51 +++++++++++++++++++ .../src/test/resources/manytomany/db.sql | 44 ++++++++++++++++ .../test/resources/manytomany/test.properties | 6 +++ 9 files changed, 148 insertions(+), 5 deletions(-) rename persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/{extracolumn => }/model/Course.java (90%) rename persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/{extracolumn => }/model/CourseRating.java (90%) rename persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/{extracolumn => }/model/CourseRatingKey.java (96%) rename persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/{extracolumn => }/model/CourseRegistration.java (89%) rename persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/{extracolumn => }/model/Student.java (91%) create mode 100644 persistence-modules/spring-jpa/src/test/java/com/baeldung/manytomany/ManyToManyIntegrationTest.java create mode 100644 persistence-modules/spring-jpa/src/test/java/com/baeldung/manytomany/ManyToManyTestConfiguration.java create mode 100644 persistence-modules/spring-jpa/src/test/resources/manytomany/db.sql create mode 100644 persistence-modules/spring-jpa/src/test/resources/manytomany/test.properties diff --git a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/Course.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/Course.java similarity index 90% rename from persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/Course.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/Course.java index 4849165c57..bdfb8e890f 100644 --- a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/Course.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/Course.java @@ -1,16 +1,20 @@ -package com.baeldung.manytomany.extracolumn.model; +package com.baeldung.manytomany.model; import java.util.Set; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; +import javax.persistence.Table; @Entity +@Table(name = "course") public class Course { @Id + @Column(name = "id") private Long id; @ManyToMany(mappedBy = "likedCourses") diff --git a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRating.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRating.java similarity index 90% rename from persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRating.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRating.java index 1b6c9d8b2c..4951f766bc 100644 --- a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRating.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRating.java @@ -1,12 +1,15 @@ -package com.baeldung.manytomany.extracolumn.model; +package com.baeldung.manytomany.model; +import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.MapsId; +import javax.persistence.Table; @Entity +@Table(name = "course_rating") public class CourseRating { @EmbeddedId @@ -22,6 +25,7 @@ public class CourseRating { @JoinColumn(name = "course_id") private Course course; + @Column(name = "rating") private int rating; public CourseRating() { diff --git a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRatingKey.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRatingKey.java similarity index 96% rename from persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRatingKey.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRatingKey.java index 6638ae6968..4e7430ed92 100644 --- a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRatingKey.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRatingKey.java @@ -1,4 +1,4 @@ -package com.baeldung.manytomany.extracolumn.model; +package com.baeldung.manytomany.model; import java.io.Serializable; diff --git a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRegistration.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRegistration.java similarity index 89% rename from persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRegistration.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRegistration.java index 225968dba4..e1f30af883 100644 --- a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/CourseRegistration.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/CourseRegistration.java @@ -1,16 +1,20 @@ -package com.baeldung.manytomany.extracolumn.model; +package com.baeldung.manytomany.model; import java.time.LocalDateTime; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.Table; @Entity +@Table(name = "course_registration") public class CourseRegistration { @Id + @Column(name = "id") private Long id; @ManyToOne @@ -21,8 +25,10 @@ public class CourseRegistration { @JoinColumn(name = "course_id") private Course course; + @Column(name = "registered_at") private LocalDateTime registeredAt; + @Column(name = "grade") private int grade; // additional properties diff --git a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/Student.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/Student.java similarity index 91% rename from persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/Student.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/Student.java index 6bc8271e7e..00561593a6 100644 --- a/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/extracolumn/model/Student.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/manytomany/model/Student.java @@ -1,18 +1,22 @@ -package com.baeldung.manytomany.extracolumn.model; +package com.baeldung.manytomany.model; import java.util.Set; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.OneToMany; +import javax.persistence.Table; @Entity +@Table(name = "student") public class Student { @Id + @Column(name = "id") private Long id; @ManyToMany diff --git a/persistence-modules/spring-jpa/src/test/java/com/baeldung/manytomany/ManyToManyIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/com/baeldung/manytomany/ManyToManyIntegrationTest.java new file mode 100644 index 0000000000..5e4334f5d4 --- /dev/null +++ b/persistence-modules/spring-jpa/src/test/java/com/baeldung/manytomany/ManyToManyIntegrationTest.java @@ -0,0 +1,24 @@ +package com.baeldung.manytomany; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = ManyToManyTestConfiguration.class) +@DirtiesContext +public class ManyToManyIntegrationTest { + + @PersistenceContext + EntityManager entityManager; + + @Test + public void contextStarted() { + } + +} diff --git a/persistence-modules/spring-jpa/src/test/java/com/baeldung/manytomany/ManyToManyTestConfiguration.java b/persistence-modules/spring-jpa/src/test/java/com/baeldung/manytomany/ManyToManyTestConfiguration.java new file mode 100644 index 0000000000..f4635b563a --- /dev/null +++ b/persistence-modules/spring-jpa/src/test/java/com/baeldung/manytomany/ManyToManyTestConfiguration.java @@ -0,0 +1,51 @@ +package com.baeldung.manytomany; + +import java.util.HashMap; +import java.util.Map; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; +import org.springframework.orm.jpa.JpaVendorAdapter; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; + +@Configuration +@PropertySource("classpath:/manytomany/test.properties") +public class ManyToManyTestConfiguration { + + @Bean + public DataSource dataSource() { + EmbeddedDatabaseBuilder dbBuilder = new EmbeddedDatabaseBuilder(); + return dbBuilder.setType(EmbeddedDatabaseType.H2) + .addScript("classpath:/manytomany/db.sql") + .build(); + } + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Value("${hibernate.hbm2ddl.auto}") String hbm2ddlType, @Value("${hibernate.dialect}") String dialect, @Value("${hibernate.show_sql}") boolean showSql) { + LocalContainerEntityManagerFactoryBean result = new LocalContainerEntityManagerFactoryBean(); + + result.setDataSource(dataSource()); + result.setPackagesToScan("com.baeldung.manytomany.model"); + result.setJpaVendorAdapter(jpaVendorAdapter()); + + Map jpaProperties = new HashMap<>(); + jpaProperties.put("hibernate.hbm2ddl.auto", hbm2ddlType); + jpaProperties.put("hibernate.dialect", dialect); + jpaProperties.put("hibernate.show_sql", showSql); + result.setJpaPropertyMap(jpaProperties); + + return result; + } + + public JpaVendorAdapter jpaVendorAdapter() { + return new HibernateJpaVendorAdapter(); + } + +} diff --git a/persistence-modules/spring-jpa/src/test/resources/manytomany/db.sql b/persistence-modules/spring-jpa/src/test/resources/manytomany/db.sql new file mode 100644 index 0000000000..02905e41ee --- /dev/null +++ b/persistence-modules/spring-jpa/src/test/resources/manytomany/db.sql @@ -0,0 +1,44 @@ +CREATE TABLE course ( + id bigint(20) NOT NULL, + PRIMARY KEY (id) +); + + +CREATE TABLE student ( + id bigint(20) NOT NULL, + PRIMARY KEY (id) +); + + +CREATE TABLE course_like ( + student_id bigint(20) NOT NULL, + course_id bigint(20) NOT NULL, + PRIMARY KEY (student_id, course_id), + CONSTRAINT fk_course_like__student FOREIGN KEY (student_id) REFERENCES student (id), + CONSTRAINT fk_course_like__course FOREIGN KEY (course_id) REFERENCES course (id) +); + + + +CREATE TABLE course_rating ( + course_id bigint(20) NOT NULL, + student_id bigint(20) NOT NULL, + rating int(11) NOT NULL, + PRIMARY KEY (course_id, student_id), + CONSTRAINT fk_course_rating__student FOREIGN KEY (student_id) REFERENCES student (id), + CONSTRAINT fk_course_rating__course FOREIGN KEY (course_id) REFERENCES course (id) +); + + + +CREATE TABLE course_registration ( + id bigint(20) NOT NULL, + grade int(11), + registered_at datetime NOT NULL, + course_id bigint(20) NOT NULL, + student_id bigint(20) NOT NULL, + PRIMARY KEY (id), + CONSTRAINT fk_course_registration__student FOREIGN KEY (student_id) REFERENCES student (id), + CONSTRAINT fk_course_registration__course FOREIGN KEY (course_id) REFERENCES course (id) +); + diff --git a/persistence-modules/spring-jpa/src/test/resources/manytomany/test.properties b/persistence-modules/spring-jpa/src/test/resources/manytomany/test.properties new file mode 100644 index 0000000000..9e4236a6c2 --- /dev/null +++ b/persistence-modules/spring-jpa/src/test/resources/manytomany/test.properties @@ -0,0 +1,6 @@ +jdbc.driverClassName=org.h2.Driver +jdbc.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1 + +hibernate.dialect=org.hibernate.dialect.H2Dialect +hibernate.show_sql=true +hibernate.hbm2ddl.auto=validate