From da22a1bbd4a991b36bc863f8334b3c0abdbc6dd0 Mon Sep 17 00:00:00 2001 From: "Keesun Baik (a.k.a, Whiteship)" Date: Sat, 7 Apr 2018 15:42:18 -0700 Subject: [PATCH] JPA-Getting-Started done --- jpa-getting-started/pom.xml | 2 +- .../main/java/me/whiteship/jpasudy/Event.java | 21 +++++++ .../me/whiteship/jpasudy/EventDetail.java | 20 +++++++ .../jpasudy/EventDetailRepository.java | 6 ++ .../me/whiteship/jpasudy/EventRepository.java | 6 ++ .../src/main/resources/application.properties | 11 ++++ .../jpasudy/EventRepositoryTest.java | 60 +++++++++++++++++++ 7 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 jpa-getting-started/src/main/java/me/whiteship/jpasudy/Event.java create mode 100644 jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventDetail.java create mode 100644 jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventDetailRepository.java create mode 100644 jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventRepository.java create mode 100644 jpa-getting-started/src/test/java/me/whiteship/jpasudy/EventRepositoryTest.java diff --git a/jpa-getting-started/pom.xml b/jpa-getting-started/pom.xml index 6ebc450..0ee55e2 100644 --- a/jpa-getting-started/pom.xml +++ b/jpa-getting-started/pom.xml @@ -46,7 +46,7 @@ com.h2database h2 - runtime + test org.postgresql diff --git a/jpa-getting-started/src/main/java/me/whiteship/jpasudy/Event.java b/jpa-getting-started/src/main/java/me/whiteship/jpasudy/Event.java new file mode 100644 index 0000000..7edc9df --- /dev/null +++ b/jpa-getting-started/src/main/java/me/whiteship/jpasudy/Event.java @@ -0,0 +1,21 @@ +package me.whiteship.jpasudy; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; + +@Entity +@Getter @Setter @EqualsAndHashCode(of = "id") +public class Event { + + @Id @GeneratedValue + private Long id; + + private String title; + + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private EventDetail eventDetail; + +} diff --git a/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventDetail.java b/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventDetail.java new file mode 100644 index 0000000..b458792 --- /dev/null +++ b/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventDetail.java @@ -0,0 +1,20 @@ +package me.whiteship.jpasudy; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; + +@Entity +@Getter @Setter @EqualsAndHashCode(of = "id") +public class EventDetail { + + @Id + @GeneratedValue + private Long id; + + @Lob @Basic(fetch = FetchType.LAZY) + private String content; + +} diff --git a/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventDetailRepository.java b/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventDetailRepository.java new file mode 100644 index 0000000..519c366 --- /dev/null +++ b/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventDetailRepository.java @@ -0,0 +1,6 @@ +package me.whiteship.jpasudy; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EventDetailRepository extends JpaRepository { +} diff --git a/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventRepository.java b/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventRepository.java new file mode 100644 index 0000000..2c594b1 --- /dev/null +++ b/jpa-getting-started/src/main/java/me/whiteship/jpasudy/EventRepository.java @@ -0,0 +1,6 @@ +package me.whiteship.jpasudy; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EventRepository extends JpaRepository { +} diff --git a/jpa-getting-started/src/main/resources/application.properties b/jpa-getting-started/src/main/resources/application.properties index e69de29..f1bfeba 100644 --- a/jpa-getting-started/src/main/resources/application.properties +++ b/jpa-getting-started/src/main/resources/application.properties @@ -0,0 +1,11 @@ +# Database +spring.datasource.url=jdbc:postgresql://localhost:5432/jpa +spring.datasource.username=jpa +spring.datasource.password=jpa + +# JPA +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL9Dialect +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.show-sql=true \ No newline at end of file diff --git a/jpa-getting-started/src/test/java/me/whiteship/jpasudy/EventRepositoryTest.java b/jpa-getting-started/src/test/java/me/whiteship/jpasudy/EventRepositoryTest.java new file mode 100644 index 0000000..5513782 --- /dev/null +++ b/jpa-getting-started/src/test/java/me/whiteship/jpasudy/EventRepositoryTest.java @@ -0,0 +1,60 @@ +package me.whiteship.jpasudy; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.persistence.EntityManager; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@DataJpaTest +public class EventRepositoryTest { + + @Autowired + EventRepository eventRepository; + + @Autowired + EntityManager entityManager; + + @Test + public void addEvent() { + Event event1 = new Event(); + event1.setTitle("new title1"); + + EventDetail eventDetail1 = new EventDetail(); + eventDetail1.setContent("new content1"); + event1.setEventDetail(eventDetail1); + + Event event2 = new Event(); + event2.setTitle("new title"); + + EventDetail eventDetail2 = new EventDetail(); + eventDetail2.setContent("new content"); + event2.setEventDetail(eventDetail2); + + // 2 Inserts + Event savedEvent1 = eventRepository.saveAndFlush(event1); + assertThat(savedEvent1.getId()).isNotNull(); + + Event savedEvent2 = eventRepository.saveAndFlush(event2); + assertThat(savedEvent2.getId()).isNotNull(); + + System.out.println("find by id"); + entityManager.clear(); + + Event eventOnly = eventRepository.findById(savedEvent1.getId()).orElseThrow(() -> new RuntimeException());// Select + + System.out.println("get detail content"); + assertThat(eventOnly.getEventDetail().getContent()).isEqualTo("new content1"); // Select detail + + System.out.println("find all"); + entityManager.clear(); + eventRepository.findAll(); // Select + } + +} \ No newline at end of file