@OneToMany에서 참조하는 값은 One에 해당하는 PK값을 Many쪽에서 FK로 가짐 → UserHistory 테이블에서는 User에 Id값을 가짐
일반적인 상황에서는 @ManyToOne이 깔끔하게 엔티티를 구성 → 해당 엔티티가 필요로 하는 FK 엔티티가 함께 가지고 있기 때문
UserHistory.java
@Entity
...
public class UserHistory extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
@ManyToOne
private User user;
}
User.java
@ToString.Exclude를 선언하지 않으면 결과 확인 순환참조로 에러 발생
@Entity
...
public class User extends BaseEntity{
...
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "user_Id", insertable = false, updatable = false)
@ToString.Exclude
private List<UserHistory> userHistories = new ArrayList<>();
}
UserEntityListener.java
public class UserEntityListener {
@PostPersist
@PostUpdate
public void postPersistAndPostUpdate(Object o){
UserHistoryRepository userHistoryRepository = BeanUtils.getBean(UserHistoryRepository.class);
User user = (User) o;
UserHistory userHistory = new UserHistory();
userHistory.setName(user.getName());
userHistory.setEmail(user.getEmail());
userHistory.setUser(user);
userHistoryRepository.save(userHistory);
}
}