Entity Listener - 2/ 패스트캠퍼스 챌린지 09일차

망고쥬스·2021년 11월 9일

User Entity History

User Entity의 경우 User Data가 들어있기 때문에 중요도가 높다.
수정된 내역의 History를 만들어 보도록 하겠다.
User History라는 Entity를 추가적으로 만들어 보도록 하겠습니다.


User History

@Entity
@NoArgsConstructor
@Data
public class UserHistory {
	@Id
	@GeneratedValue
    private Long id;
    private Long userId;
    private String name;
    private String email;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
    }

UserEntityListener (class)

@Component //Spring에 Bean으로 등록하기 위해 선언
public class UserEntityListener {

	@AutoWired
	private final UserHistoryRepository userHistroyRepository;
	
	@PreUpdate
	public void preUpdate(Object o){
    		User user = (User) o ;
        
        	UserHistory userHistory = new UserHistory();
        	userHistory.setUserId(user.getId());
        	userHistory.setName(user.getName());
        	userHistory.setEmail(User.getEmail());
    
    		userHistoryRepository.save(userHistory);
	}

UserHistoryRepository (interface)

public interface UserInterfaceRepository extends JpaRepository<UserHistory, Long>{

}

UserRepositoryTest

@Test
void userHistoryTest(){
	User user = new User();
	user.setEmail("martin-new@fastcampus.com");
	user.setName("martin");

	userRepository.save(user);
    
	user.setName("martin-new-new");
    
	userRepository.save(user);
    
	userHistory.findAll().forEach(System.out::println);
	}
}

추가기능에 대한 설명

@EnableJpaAuditing
: Jpa에서 기본적으로 제공해주는 Listener 어노테이션
사용시에는 DTO에 필수적으로 @EntityListeners(value = AuditionEntityListener.class) 선언
Auditing으로 각 데이터에 지정해준다

@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;

이렇게 한다면 자동으로 값이 부여된다.

`MappedSuperClass'
: 해당 클래스의 필드를 상속받는 Entity의 컬럼으로 포함시켜준다.
: Entity


2021-11-09

#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는Java/Spring웹개발마스터초격차패키지Online

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3FVdhDa

profile
#newbieDeveloper #since 2021.04.06

0개의 댓글