본문 바로가기
I LEARNED/TIL

TIL_연관관계 주인 정하기

by veganwithbacon 2022. 8. 15.
반응형
조금을 알기 위해서 많이 공부해야한다

 

 

Spring에서 CRUD를 통한 연관관계를 맺다가 아래와 같은 오류가 발생했다.

JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation 

 

이전까지만 해도 당연히 연관관계에서 주인을 정해주려면 기존까지 @JoinColumn(name=" ") 을 통해서만 연관관계의 주인을 맺어줄 수 있는 줄 알았다.

사용자와 게시물에 대한 연관관계에 있어서 무결성제약을 위반하게 되어 위와 같은 오류를 발생시켰다.

Referential integrity constraint violation을 벗어나기 위해서는 참조 무결성 제약 조건을 지켜줘야하는 것이다.

참조 무결성 제약 조건이란 각 릴레이션(관계)은 참조할 수 없는 외래키 값을 가질 수 없다는 뜻이다.

 

아무리 릴레이션이 있다해도 전혀 무관하다면 참조 무결성을 위반하게 된다는 것이다.

뜬금없는 @JoinColumn(name="~~~~")를 할 이유가 없이

 

Owner을 정하려면 @OneToMany(mappedBy = "~~~")가 있는 곳에 적어주어 Owner가 아님을 정의하면 되는 것이다.기존에 mappedBy를 공부할때는 연관관계를 찾아보다가 블로그에 조그만하게 끼워져있는 내용으로만 이해했었는데 완전 돌팔이 블로그였다... 조심해서 봐야할듯하다. 기존에 작성했던(https://veganwithbacon.tistory.com/26) 내용도 고쳤다.

 

  mappedBy?

테이블은 외래키 1개를 통해 두 테이블의 연관관계를 관리한다.

이 때 엔티티를 단방향 매핑시 참조를 하나만 사용한다

양방향 관계라면 객체의 참조는 양쪽에서 하나씩 둘인데,외래키는 하나이므로 두 엔티티 중 하나(OWNER)를 정해서 테이블의 외래키를 관리해야한다.MANY쪽이 OWNER이며 mappedBy는 @OneToMany 쪽의 컬렉션 칼럼에 기술해 Owner가 아님을 정의한다.

- mappdBy @OneToOne, @OneToMany, @ManyToMany 어노테이션에서 사용할 수 있으며 mappedBy가 없으면 JAP에서 양뱡향 관계라는 것을 모르고 두 엔티티의 매핑 테이블을 생성한다

- mappedBy OWBER 엔티티의 필드나 속성과 대응된다.

-  ManyToOne 양방향 관계에서 Many측에는 mappedBy요소를 사용할 수 없다.(MANY 쪽이 OWNER)

OneToOne 양방향 관계에서 OWNER는 반대쪽(INVERSE SIDE)에 대한 FK를 가지는 쪽이다.

-   ManyToMany 양방향 관계는 양쪽 중 아무나 OWNER가 될 수 있다

반응형

'I LEARNED > TIL' 카테고리의 다른 글

TIL_(생활코딩)객체 지향 프로그래밍  (0) 2022.08.15
WIL_2 CORS  (0) 2022.08.15
TIL_@Id & @GeneratedValue  (0) 2022.08.11
TIL_@Column #Spring  (0) 2022.08.07
TIL_@RequestMapping #Spring  (0) 2022.08.06

댓글