スプリングガイドからJPA処理データベースへ(05)
3253 ワード
05.JPA監査による自動生成時間/修正時間
//생성일 추가 코드 예제
public void savePosts(){
...
posts.setCreateDate(new LocalDate());
postsRepository.save(posts);
...
}
=>JPAレビューを使用して、このような単純で重複したコードを記述する必要がある問題を解決します.5-1)LocalDateの使用
Java 8から、日付タイプとしてLocalDateとLocalDateTimeを使用
1.ドメインパッケージにBaseTimeEntityクラスを作成する
すべてのエンティティの親として、エンティティのcreatedDate、modifiedDateの役割を自動的に管理します.
import lombok.Getter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@MappedSuperclass // 1.
@EntityListeners(AuditingEntityListener.class) // 2.
public class BaseTimeEntity {
@CreatedDate// 3.
private LocalDateTime createDate;
@LastModifiedDate // 4.
private LocalDateTime modifieDate;
}
1. @MappedSuperclass
2. @EntityListeners(AuditingEntityListener.class)
3. @CreatedDate
4. @LastModifiedDate
クエリ
2.PostsクラスをBaseTimeEntityの継承に変更
3.アプリケーションクラスにアクティブな宣言を追加
@EnableJpaAuditingを追加し、すべてのJPA Auditingを有効にします.
/*이 프로젝트의 메인 클래스*/
@EnableJpaAuditing //JPA Auditing 활성화
@SpringBootApplication //스프링부트의 자동설정, 스프링 Bean 읽기와 생성 모두 자동 설정
public class Application {
public static void main(String[] args){
//SpringApplication.run ~> 내장 WAS 실행
SpringApplication.run(Application.class, args);
}
}
5-2)JPA監査試験コードの作成
1.試験方法をPostsRepositoryTestクラスに追加する
@Test
public void BaseTimeEntity_등록(){
//given
LocalDateTime now = LocalDateTime.of(2019,6,4,0,0,0);
postsRepository.save(Posts.builder()
.title("title")
.content("content")
.author("author")
.build());
//when
List<Posts> postsList = postsRepository.findAll();
//then
Posts posts = postsList.get(0);
System.out.println(">>>>>>>> createDate=" + posts.getCreateDate()
+ ", modifiedDate=" + posts.getModifieDate());
assertThat(posts.getCreateDate()).isAfter(now);
assertThat(posts.getModifieDate()).isAfter(now);
}
2.テストコードの実行
実際の時間がよく保存されていることがわかります.登録日/変更日を考慮せずに、BaseTimeEntityを継承するだけです.
Reference
この問題について(スプリングガイドからJPA処理データベースへ(05)), 我々は、より多くの情報をここで見つけました https://velog.io/@cutehuman/03-스프링-부트에서-JPA로-데이터베이스-다루기05テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol