From 83efcfcc6ed5138412a9b35f527f7a45cd5c817a Mon Sep 17 00:00:00 2001 From: LocKey Date: Tue, 20 Aug 2024 17:57:31 +0900 Subject: [PATCH 1/6] =?UTF-8?q?Task=202.=20=EB=8B=A4=EB=8C=80=EC=9D=BC=20?= =?UTF-8?q?=EB=8B=A8=EB=B0=A9=ED=96=A5=20/=20@ManyToOne=20annotation?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=8B=A4=EB=8C=80=EC=9D=BC=20=EB=8B=A8?= =?UTF-8?q?=EB=B0=A9=ED=96=A5=20=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initial/src/main/java/cholog/Book.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/spring-data-jpa-2/initial/src/main/java/cholog/Book.java b/spring-data-jpa-2/initial/src/main/java/cholog/Book.java index 6f119218..3b14e9db 100644 --- a/spring-data-jpa-2/initial/src/main/java/cholog/Book.java +++ b/spring-data-jpa-2/initial/src/main/java/cholog/Book.java @@ -1,9 +1,6 @@ package cholog; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import java.util.Set; @@ -13,12 +10,16 @@ public class Book { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; + @ManyToOne + Publisher publisher; public Book() { } public Book(String name, Publisher publisher) { + this.name = name; + this.publisher = publisher; } public Long getId() { @@ -30,7 +31,7 @@ public String getName() { } public Publisher getPublisher() { - return null; + return publisher; } public Set getAuthors() { From c721531a9abdbd4880451e1158ae48bb1f206e15 Mon Sep 17 00:00:00 2001 From: LocKey Date: Tue, 20 Aug 2024 19:07:35 +0900 Subject: [PATCH 2/6] =?UTF-8?q?Task=203.1.=20=EB=8B=A4=EB=8C=80=EC=9D=BC?= =?UTF-8?q?=20=EC=96=91=EB=B0=A9=ED=96=A5=20/=20mappedBy=20=EC=86=8D?= =?UTF-8?q?=EC=84=B1=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EB=8B=A4=EB=8C=80=EC=9D=BC=20=EC=96=91=EB=B0=A9=ED=96=A5=20?= =?UTF-8?q?=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initial/src/main/java/cholog/Publisher.java | 12 ++++++------ .../initial/src/test/java/cholog/ManyToOneTest.java | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java b/spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java index b0c6303e..f2567b4a 100644 --- a/spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java +++ b/spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java @@ -1,10 +1,8 @@ package cholog; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; +import java.util.HashSet; import java.util.Set; @Entity @@ -13,6 +11,8 @@ public class Publisher { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; + @OneToMany(mappedBy = "publisher") + Set books = new HashSet<>(); public Publisher(String name) { this.name = name; @@ -30,10 +30,10 @@ public String getName() { } public void addBook(Book book) { - + books.add(book); } public Set getBooks() { - return null; + return books; } } diff --git a/spring-data-jpa-2/initial/src/test/java/cholog/ManyToOneTest.java b/spring-data-jpa-2/initial/src/test/java/cholog/ManyToOneTest.java index 71ef6b8f..bf5a20c6 100644 --- a/spring-data-jpa-2/initial/src/test/java/cholog/ManyToOneTest.java +++ b/spring-data-jpa-2/initial/src/test/java/cholog/ManyToOneTest.java @@ -45,8 +45,8 @@ void biDirection() { entityManager.persist(book); publisher.addBook(book); - entityManager.flush(); - entityManager.clear(); + entityManager.flush(); // 영속성 컨텍스트에 있는 publisher와 book 엔티티의 상태(추가 및 연관관계 설정)가 데이터베이스에 반영됩니다. 즉, Publisher와 Book 객체가 실제 데이터베이스에 저장 + entityManager.clear(); // 영속성 컨텍스트를 초기화하여 현재 관리되고 있는 모든 엔티티를 비영속 상태로 만듭니다. 이후 Publisher 객체를 조회할 때, 영속성 컨텍스트가 아닌 데이터베이스에서 해당 엔티티를 다시 가져오게 됩니다 Publisher persistPublisher = entityManager.find(Publisher.class, publisher.getId()); assertThat(persistPublisher).isNotNull(); From 352980aee7b6c01cdcec53f25129f6c0a86ee753 Mon Sep 17 00:00:00 2001 From: LocKey Date: Tue, 20 Aug 2024 22:13:30 +0900 Subject: [PATCH 3/6] =?UTF-8?q?Task=203.2.=20=EB=8B=A4=EB=8C=80=EC=9D=BC?= =?UTF-8?q?=20=EC=96=91=EB=B0=A9=ED=96=A5=20/=20JPA=EC=9D=98=20=EB=A1=9C?= =?UTF-8?q?=EB=94=A9=EC=A0=84=EB=9E=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java b/spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java index f2567b4a..60e1b6bb 100644 --- a/spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java +++ b/spring-data-jpa-2/initial/src/main/java/cholog/Publisher.java @@ -11,7 +11,7 @@ public class Publisher { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; - @OneToMany(mappedBy = "publisher") + @OneToMany(mappedBy = "publisher", fetch = FetchType.EAGER) Set books = new HashSet<>(); public Publisher(String name) { From 9dea6d2122a117c8745b292fef9b5c31103a0363 Mon Sep 17 00:00:00 2001 From: LocKey Date: Tue, 20 Aug 2024 22:28:41 +0900 Subject: [PATCH 4/6] =?UTF-8?q?Task=204.=20=EC=9D=BC=EB=8C=80=EC=9D=BC=20?= =?UTF-8?q?=EB=8B=A8=EB=B0=A9=ED=96=A5=20/=20@OneToOne=20annotation?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=BC=EB=8C=80=EC=9D=BC=20=EB=8B=A8?= =?UTF-8?q?=EB=B0=A9=ED=96=A5=20=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initial/src/main/java/cholog/Author.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/spring-data-jpa-2/initial/src/main/java/cholog/Author.java b/spring-data-jpa-2/initial/src/main/java/cholog/Author.java index 937debe1..aac1e3c1 100644 --- a/spring-data-jpa-2/initial/src/main/java/cholog/Author.java +++ b/spring-data-jpa-2/initial/src/main/java/cholog/Author.java @@ -1,17 +1,16 @@ package cholog; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; @Entity public class Author { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - + @OneToOne + Person person; public Author(Person person) { + this.person = person; } public Author() { @@ -22,6 +21,6 @@ public Long getId() { } public Person getPerson() { - return null; + return person; } } From ea8e6312867d8a5c1fafccae51a71f46bba4be60 Mon Sep 17 00:00:00 2001 From: LocKey Date: Tue, 20 Aug 2024 23:50:55 +0900 Subject: [PATCH 5/6] =?UTF-8?q?Task=205.=20=EC=9D=BC=EB=8C=80=EC=9D=BC=20?= =?UTF-8?q?=EC=96=91=EB=B0=A9=ED=96=A5=20/=20=EC=96=91=EC=AA=BD=EC=97=90?= =?UTF-8?q?=20@OneToOne=20=EB=A7=A4=ED=95=91,=20mappedBy=20=EB=B0=98?= =?UTF-8?q?=EB=93=9C=EC=8B=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initial/src/main/java/cholog/Person.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/spring-data-jpa-2/initial/src/main/java/cholog/Person.java b/spring-data-jpa-2/initial/src/main/java/cholog/Person.java index 6cf1d009..3dd4ef38 100644 --- a/spring-data-jpa-2/initial/src/main/java/cholog/Person.java +++ b/spring-data-jpa-2/initial/src/main/java/cholog/Person.java @@ -1,9 +1,6 @@ package cholog; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; @Entity public class Person { @@ -11,7 +8,8 @@ public class Person { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; - + @OneToOne(mappedBy = "person", fetch = FetchType.LAZY) + Author author; public Person() { } @@ -29,6 +27,6 @@ public String getName() { } public Author getAuthor() { - return null; + return author; } } From 2107291fff66b74f0ef92acf414c7dec561a9c16 Mon Sep 17 00:00:00 2001 From: LocKey Date: Wed, 21 Aug 2024 00:10:29 +0900 Subject: [PATCH 6/6] =?UTF-8?q?Task=206.=20=EB=8B=A4=EB=8C=80=EB=8B=A4=20/?= =?UTF-8?q?=20=EC=97=B0=EA=B2=B0=ED=85=8C=EC=9D=B4=EB=B8=94=EC=9D=84=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=B4=EC=84=9C=20=EB=8B=A4=EB=8C=80?= =?UTF-8?q?=EB=8B=A4=20=EB=A7=A4=ED=95=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../initial/src/main/java/cholog/Author.java | 11 +++++++++++ .../initial/src/main/java/cholog/Book.java | 8 ++++++-- .../src/main/java/cholog/BookAuthor.java | 19 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/spring-data-jpa-2/initial/src/main/java/cholog/Author.java b/spring-data-jpa-2/initial/src/main/java/cholog/Author.java index aac1e3c1..d7f26ba7 100644 --- a/spring-data-jpa-2/initial/src/main/java/cholog/Author.java +++ b/spring-data-jpa-2/initial/src/main/java/cholog/Author.java @@ -2,6 +2,9 @@ import jakarta.persistence.*; +import java.util.HashSet; +import java.util.Set; + @Entity public class Author { @Id @@ -9,6 +12,10 @@ public class Author { private Long id; @OneToOne Person person; + + @OneToMany(mappedBy = "author") + Set books = new HashSet<>(); + public Author(Person person) { this.person = person; } @@ -23,4 +30,8 @@ public Long getId() { public Person getPerson() { return person; } + + public Set getBooks() { + return books; + } } diff --git a/spring-data-jpa-2/initial/src/main/java/cholog/Book.java b/spring-data-jpa-2/initial/src/main/java/cholog/Book.java index 3b14e9db..ba1d00cb 100644 --- a/spring-data-jpa-2/initial/src/main/java/cholog/Book.java +++ b/spring-data-jpa-2/initial/src/main/java/cholog/Book.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; +import java.util.HashSet; import java.util.Set; @Entity @@ -13,6 +14,9 @@ public class Book { @ManyToOne Publisher publisher; + @OneToMany(mappedBy = "book") + Set authors = new HashSet<>(); + public Book() { } @@ -34,7 +38,7 @@ public Publisher getPublisher() { return publisher; } - public Set getAuthors() { - return null; + public Set getAuthors() { + return authors; } } diff --git a/spring-data-jpa-2/initial/src/main/java/cholog/BookAuthor.java b/spring-data-jpa-2/initial/src/main/java/cholog/BookAuthor.java index 4d9c8d73..e2d1df45 100644 --- a/spring-data-jpa-2/initial/src/main/java/cholog/BookAuthor.java +++ b/spring-data-jpa-2/initial/src/main/java/cholog/BookAuthor.java @@ -1,7 +1,26 @@ package cholog; +import jakarta.persistence.*; + +@Entity public class BookAuthor { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne + Book book; + + @ManyToOne + Author author; + public BookAuthor(Book book, Author author) { + this.book = book; + this.author = author; + } + + public BookAuthor() { } }