290570
prepersist (trouble shooting) 본문
1. createdat, updatedat 에 쓸 어노테이션 @CreatedDate, @LastModifiedDate 를 알게됨
>> 추후 자세히 정리
2. 어노테이션 붙이려고 보니 createdat, updatedat 사용하는 다른 엔티티들도 많아서 BaseEntity 생성
3. BaseEntity 생성 후 User entity 에서 createdat, updatedat 코드 제거하고 BaseEntity 상속받게 함
@Getter
@MappedSuperclass
public class BaseEntity {
@CreatedDate
@Column(name="createdat", nullable = false, updatable = false)
private LocalDateTime createdat;
@LastModifiedDate
@Column(name="updatedat", nullable = false)
private LocalDateTime updatedat;
}
public class User extends BaseEntity {
}
4. BaseEntity 상속받고 BaseEntity 에 createdat updatedat 잘 있는데 오류가 남
org.hibernate.PropertyValueException: not-null property references a null or transient value : cohttp://m.example.fanmon_be.domain.user.entity.User.createdat
>> createdat 에 null 오류
public class User {
@Id
@Column(name = "useruuid", nullable = false)
private UUID useruuid;
@PrePersist
public void generateUUID(){
if(useruuid == null){
useruuid = UUID.randomUUID();
}
}
uuid 할때 prepersist 써준것처럼 createdat, updatedat 에도 prepersist 필요하다..!
(prepersist 에 대해 추후 자세히 추가하기)
5. createdat, updatedat 도 prepersist 추가
@Getter
@MappedSuperclass
public class BaseEntity {
@CreatedDate
@Column(name="createdat", nullable = false, updatable = false)
private LocalDateTime createdat;
@LastModifiedDate
@Column(name="updatedat", nullable = false)
private LocalDateTime updatedat;
@PrePersist
protected void prePersist() {
LocalDateTime now = LocalDateTime.now();
createdat = now;
updatedat = now;
}
@PreUpdate
protected void preUpdate() {
updatedat = LocalDateTime.now();
}
}
회원 가입 시 회원 생성 잘 됨 !!
단 ,,예기치 못한 문제 추가됨,,
실행할때 오류는 안나지만,,
회원 가입은 잘 되지만,,
generateUUID 에 빨간줄이 생김
'PrePersist' entity listener method is already defined in class 'User' or in one of its superclasses
빨간줄에 커서를 대면 이렇게 떴는데
현재 상속중인 BaseEntity 안에도 PrePersist 가 있고, User entity 에도 PrePersist 가 있어서 생긴 문제 같았다
6. 결국 다시 BaseEntity 에서 PrePersist 빼고 (아까 createdat에 null 떴던 그상태로) 코드 원상복귀 시키고
@Getter
@MappedSuperclass
public class BaseEntity {
@CreatedDate
@Column(name="createdat", nullable = false, updatable = false)
protected LocalDateTime createdat;
@LastModifiedDate
@Column(name="updatedat", nullable = false)
protected LocalDateTime updatedat;
}
7. User entity 안에 uuid와 함께 prepersist 선언함
@PrePersist
public void generateUUID(){
if(useruuid == null){
useruuid = UUID.randomUUID();
}
LocalDateTime now = LocalDateTime.now();
super.createdat = now;
super.updatedat = now;
}
'java_spring (2024.05 ~ 2024.10)' 카테고리의 다른 글
validation (trouble shooting) (0) | 2024.10.02 |
---|---|
Validation 적용 (0) | 2024.10.02 |
코드 리팩토링(builder pattern) (0) | 2024.09.30 |
spring security 코드 작성 (0) | 2024.09.29 |
spring security (0) | 2024.09.28 |