조금을 알기 위해서 많이 공부해야한다
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 |
댓글