기본 콘텐츠로 건너뛰기

라벨이 Hibernate인 게시물 표시

JPA @OneToOne: 참조 엔티티가 없을 때 Null 처리하는 방법 (@NotFound)

🧩 JPA @OneToOne: 참조 엔티티가 없을 때 Null 처리하는 방법 (@NotFound) AI 생성 이미지: JPA @OneToOne: 참조 엔티티가 없을 때 Null 처리하는 방법 (@NotFound) JPA 매핑 중 외래 키는 남아 있으나 실제로 참조하는 레코드가 삭제되어 관계가 깨지는 경우가 있습니다. 특히 1:1 매핑에서는 이런 상황이 런타임 예외로 이어지기 쉽습니다. 이 글에서는 JPA @OneToOne: 참조 엔티티가 없을 때 Null 처리하는 방법 (@NotFound)을 중심으로, Hibernate의 @NotFound 어노테이션을 활용해 안전하게 처리하는 실무 기법을 소개합니다. 1. 🚨 @OneToOne 관계에서 발생하는 문제 예를 들어 Member와 Profile이 1:1로 연결되어 있고, Member 테이블에 profile_id 외래 키가 존재한다고 가정합니다. 정상적인 상황: profile_id가 유효한 Profile 레코드를 가리킵니다. 문제 상황: profile_id가 DB에 남아 있으나, 실제 Profile 엔티티는 삭제된 경우(ORPHAN 데이터 발생). 기본 JPA/Hibernate는 외래 키가 null이 아니면 참조 대상이 존재한다고 전제합니다. 따라서 참조 대상이 없을 때 엔티티에 접근하면 EntityNotFoundException 또는 지연로딩 시 LazyInitializationException 같은 예외가 발생하여 서비스가 중단될 수 있습니다. 2. ✨ 해결책: `@NotFound(action=NotFoundAction.IGNORE)` Hibernate는 @NotFound 어노테이션을 제공해 이런 결손 데이터를 우아하게 다룰 수 있게 해줍니다. @...

JPA @OneToMany/@ManyToOne에서 mappedBy reference an unknown target entity 에러 해결하기

JPA mappedBy reference an unknown target entity 오류 원인과 해결 방법 JPA로 @OneToMany / @ManyToOne 양방향 매핑 을 구현하다 보면 다음과 같은 오류를 한 번쯤은 만나게 됩니다. mappedBy reference an unknown target entity property 특히 아래와 같이 mappedBy="parentVO" 와 같이 지정한 경우, 필드명 / 매핑 관계 / 엔티티 설정 에 조금만 틀어져도 이 오류가 바로 발생합니다. 1. 예제 코드 구조 (Parent & Child) 질문에서 사용한 구조를 먼저 정리해보면 다음과 같습니다. A Class (Parent) @Entity public class Parent { @Id @GeneratedValue private Long parentSeq; @OneToMany(mappedBy = "parentVO") private List<Child> rsrcGuildsList; // getter / setter ... } B Class (Child) @Entity public class Child { @Id @GeneratedValue private Long childSeq; @ManyToOne(optional = false) @JoinColumn(name = "parent_seq", updatable = false, insertable = false) private Parent parentVO; // getter / setter ... } Parent에서는 @OneToMany(mappedBy="parentVO") 를...