일자 관련 자동 처리를 위한 Entity - EntityListener

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Data
public abstract class AuditableEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime updatedAt;
}

1. 1:1 단방향 관계

@Entity
@NoArgsConstructor
@Data
public class User extends AuditableEntity {

    @Id 
    @GeneratedValue
    private Long id;

    private String name;

    @OneToOne
    private Address address;
}
@Entity
@NoArgsConstructor
@Data
public class Address extends AuditableEntity {

    @Id 
    @GeneratedValue
    private Long id;

    private String city;
    private String street;
}
  • User가 관계의 주인
  • address_id 외래키가 User 테이블에 생성됨
  • Address에서는 User 참조가 없음 (단방향)

2. 양방향 관계 + mappedBy 사용

@Entity
@NoArgsConstructor
@Data
public class User extends AuditableEntity {

    @Id 
    @GeneratedValue
    private Long id;

    private String name;

    @OneToOne(mappedBy = "user")
    @ToString.Exclude 
    private Address address;
}
@Entity
@NoArgsConstructor
@Data
public class Address extends AuditableEntity {

    @Id 
    @GeneratedValue
    private Long id;

    private String city;
    private String street;

    @OneToOne
    private User user;
}
  • Address가 관계의 주인 (외래키 보유)
  • User는 mappedBy = "user"로 연관관계 주인이 아님
  • 양방향 관계이지만 외래키는 Address에 있음
  • 양방향 관계를 사용할 때 순환 참조를 조심해야한다. 따라서 사용할 이유가 있을 경우에는 한쪽에 @ToString.Exclude 를 사용하여 순환 참조를 방지

'Spring' 카테고리의 다른 글

JPA - 1:N 연관 관계  (0) 2025.06.16
JPA - Entity Listener의 활용  (1) 2025.06.12
JPA  (1) 2025.06.06
Jacoco - 테스트 커버리지 확인하기  (1) 2025.04.21
JUnit  (0) 2025.04.21

+ Recent posts