From b13ff8fa6e91e0b47bf1443c635c3ce4b3ca1f07 Mon Sep 17 00:00:00 2001 From: BEOMJUN KIM Date: Wed, 15 Jul 2020 20:27:39 +0900 Subject: [PATCH] =?UTF-8?q?CreatedDate,=20UpdatedDate=20final=EB=A1=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/jdbc/example/auditable/Issue.java | 39 +++++++++++++++++++ .../example/auditable/IssueRepository.java | 6 +++ .../spring/data/jdbc/example/id/Orders.java | 5 +++ src/main/resources/schema.sql | 20 +++++++--- .../auditable/IssueRepositoryTest.java | 23 +++++++++++ 5 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 src/main/java/spring/data/jdbc/example/auditable/Issue.java create mode 100644 src/main/java/spring/data/jdbc/example/auditable/IssueRepository.java create mode 100644 src/test/java/spring/data/jdbc/example/auditable/IssueRepositoryTest.java diff --git a/src/main/java/spring/data/jdbc/example/auditable/Issue.java b/src/main/java/spring/data/jdbc/example/auditable/Issue.java new file mode 100644 index 0000000..42fed54 --- /dev/null +++ b/src/main/java/spring/data/jdbc/example/auditable/Issue.java @@ -0,0 +1,39 @@ +package spring.data.jdbc.example.auditable; + +import java.time.LocalDateTime; + +import javax.validation.constraints.NotBlank; + +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jdbc.core.mapping.AggregateReference; + +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.With; +import spring.data.jdbc.example.id.Member; + +@Builder +@Getter +public class Issue { + @Id + @With(AccessLevel.PACKAGE) + private final Long id; + + @CreatedBy + private final AggregateReference memberId; + + @NotBlank + private final String title; + + @CreatedDate + @With(AccessLevel.PACKAGE) + private final LocalDateTime createdAt; + + @LastModifiedDate + @With(AccessLevel.PACKAGE) + private final LocalDateTime updatedAt; +} diff --git a/src/main/java/spring/data/jdbc/example/auditable/IssueRepository.java b/src/main/java/spring/data/jdbc/example/auditable/IssueRepository.java new file mode 100644 index 0000000..5d1358b --- /dev/null +++ b/src/main/java/spring/data/jdbc/example/auditable/IssueRepository.java @@ -0,0 +1,6 @@ +package spring.data.jdbc.example.auditable; + +import org.springframework.data.repository.CrudRepository; + +public interface IssueRepository extends CrudRepository { +} diff --git a/src/main/java/spring/data/jdbc/example/id/Orders.java b/src/main/java/spring/data/jdbc/example/id/Orders.java index feffacd..fdbda37 100644 --- a/src/main/java/spring/data/jdbc/example/id/Orders.java +++ b/src/main/java/spring/data/jdbc/example/id/Orders.java @@ -2,12 +2,16 @@ import java.util.UUID; +import org.springframework.core.annotation.Order; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.conversion.MutableAggregateChange; +import org.springframework.data.relational.core.mapping.event.AbstractRelationalEventListener; +import org.springframework.data.relational.core.mapping.event.AfterSaveEvent; import org.springframework.data.relational.core.mapping.event.BeforeSaveCallback; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; @AllArgsConstructor @Getter @@ -17,6 +21,7 @@ public class Orders { private String title; + @Order(1) public static class BeforeSaveOrderCallback implements BeforeSaveCallback { @Override public Orders onBeforeSave(Orders aggregate, MutableAggregateChange aggregateChange) { diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 713f9bf..cd8d5f8 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -62,9 +62,10 @@ create table if not exists product create table if not exists member ( - id bigint primary key, - name varchar(50), - password varchar(255) + id bigint primary key, + name varchar(50), + password varchar(255), + created_at datetime ); create table if not exists subway @@ -114,6 +115,15 @@ create table if not exists validation_entity create table if not exists validation_child_entity ( - email varchar(255), - validation_entity bigint + email varchar(255), + validation_entity bigint ); + +create table if not exists issue +( + id bigint primary key auto_increment, + member_id bigint, + title varchar(255), + created_at datetime, + updated_at datetime +) diff --git a/src/test/java/spring/data/jdbc/example/auditable/IssueRepositoryTest.java b/src/test/java/spring/data/jdbc/example/auditable/IssueRepositoryTest.java new file mode 100644 index 0000000..37266fe --- /dev/null +++ b/src/test/java/spring/data/jdbc/example/auditable/IssueRepositoryTest.java @@ -0,0 +1,23 @@ +package spring.data.jdbc.example.auditable; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.jdbc.core.mapping.AggregateReference; + +@SpringBootTest +class IssueRepositoryTest { + @Autowired + private IssueRepository issueRepository; + + @Test + void name() { + final Issue issue = issueRepository.save( + Issue.builder().title("이슈").memberId(AggregateReference.to(1L)).build()); + + assertThat(issue.getCreatedAt()).isNotNull(); + assertThat(issue.getUpdatedAt()).isNotNull(); + } +}