강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

정현도님의 프로필 이미지
정현도

작성한 질문수

실전! 스프링 데이터 JPA

Auditing

Auditing 관련 질문 입니다

해결된 질문

작성

·

530

0

글을 조회하면 조회수가 1 올라가도록 서비스를 짰는데, 문제는 조회수를 올리면서 lastModifiedDate 필드도 함께 업데이트 됩니다.

제가 원하는 동작은 글 작성자가 글을 수정했을 때만 lastModifiedDate 필드가 업데이트되는 것입니다.

이 경우에는 상속을 하지 않고 lastModifiedDate 필드를 따로 만들어 수정 메소드에서 lastModifiedDate 필드를 수정하는게 best practice 일까요?

감사합니다.

@MappedSuperclass
@Getter
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
private LocalDateTime createdDate;

@LastModifiedDate
private LocalDateTime lastModifiedDate;

public boolean isModified() {
return !createdDate.isEqual(lastModifiedDate);
}
}
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Post extends BaseEntity {

@Id
@GeneratedValue
@Column(name = "post_id")
private Long id;

@ManyToOne(fetch = LAZY)
@JoinColumn(name = "member_id")
private Member member;

private int views;

private String title;

@Column(length = 2000)
private String content;

public Post(Member member, String title, String content) {
this.member = member;
this.title = title;
this.content = content;
}

public void increaseViews() {
views += 1;
}
}
@Service
@RequiredArgsConstructor
@Transactional
public class PostService {

private final PostRepository postRepository;

public Post write(Post post) {
return postRepository.save(post);
}

@Transactional(readOnly = true)
public Page<Post> findAll(Pageable pageable) {
return postRepository.findAll(pageable);
}

public Post view(Long id) throws PostNotFoundException {
Post post = postRepository.findById(id).orElseThrow(() -> new PostNotFoundException("게시물을 찾을 수 없습니다."));
post.increaseViews();
return post;
}
}
public interface PostRepository extends JpaRepository<Post, Long> {

@Override
@EntityGraph(attributePaths = {"member"})
Page<Post> findAll(Pageable pageable);
}

퀴즈

66%나 틀려요. 한번 도전해보세요!

Spring Data JPA 리포지토리의 사용자 정의 메서드를 구현하는 주된 이유는 무엇일까요?

단순한 CRUD 연산을 수행하기 위해서입니다.

Spring Data JPA만으로는 구현하기 어려운 복잡한 쿼리나 JDBC/MyBatis 사용 등 특정 기술이 필요할 때 사용합니다.

Spring Data JPA가 제공하는 기본 메서드를 오버라이드하기 위해서입니다.

모든 리포지토리 메서드를 수동으로 구현하기 위해서입니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 현도님

네 이 경우 별도로 관리하셔야 합니다.

감사합니다.

정현도님의 프로필 이미지
정현도
질문자

감사합니다.  ^^

정현도님의 프로필 이미지
정현도

작성한 질문수

질문하기