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

망고쥬스·2021년 11월 9일
0

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개의 댓글