Web/JPA
확장기능
프로그래멍
2020. 2. 18. 00:15
* 사용자 정의 리포지터리 구현
인터페이스는 아무이름이나 상관없음
그러나 구현하는 클래스 이름은 MemberRepository + Impl 붙여서 생성한다.
public interface MemberRepositoryCustom {
List<Member> findMemberCustom();
}
@RequiredArgsConstructor
public class MemberRepositoryImpl implements MemberRepositoryCustom {
private final EntityManager em;
@Override
public List<Member> findMemberCustom() {
return em.createQuery("select m from Member m")
.getResultList();
}
}
public interface MemberRepository extends JpaRepository<Member, Long>, MemberRepositoryCustom {
}
!! 임의의 레포지토리를 생성해서 진행해도 된다.
꼭 사용자 정의 리포지토리 구현을 안해도 됨.
* Auditing
: 등록일, 수정일 , 등록자 , 수정자 자동세팅
순수 JPA
package study.datajpa.entity;
@MappedSuperclass @Getter
public class JpaBaseEntity {
@Column(updatable = false)
private LocalDateTime createdDate;
private LocalDateTime updatedDate;
@PrePersist
public void prePersist() {
LocalDateTime now = LocalDateTime.now();
createdDate = now;
updatedDate = now;
}
@PreUpdate
public void preUpdate() {
updatedDate = LocalDateTime.now();
}
}
: 상속받아서 사용
스프링 JPA
: @EnableJpaAuditing 스프링 부트 설정 클래스에 적용해야함
package study.datajpa.entity;
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Getter
public class BaseEntity {
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
@CreatedBy
@Column(updatable = false)
private String createdBy;
@LastModifiedBy
private String lastModifiedBy;
}
@EntityListeners(AuditingEntityListener.class)
귀찮으면...xml 파일로 설정하면 된다.
META-INF / orm.xml
<?xml version=“1.0” encoding="UTF-8”?>
<entity-mappings xmlns=“http://xmlns.jcp.org/xml/ns/persistence/orm”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=“http://xmlns.jcp.org/xml/ns/persistence/ orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_2.xsd”
version=“2.2">
<persistence-unit-metadata>
<persistence-unit-defaults>
<entity-listeners>
<entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener”/>
</entity-listeners>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
* Web 확장 - 도메인 클래스 컨버터
: 조회용으로만 사용하기 깊게 들어가면 JPA를 잘 알아야됨
* Web 확장 - 페이징과 정렬