[TIL] JPA 삽질 정리

두리두두·2023년 1월 21일
0

TIL

목록 보기
2/15
post-thumbnail
  • JPA로 데이터베이스 테이블 생성하는데 이틀 넘게 걸렸다!!
  • 그와중에 급히 공부하고 시작한거라 헷갈리는 것도 많았고, 제대로 모르는채로 쓴 것도 많은 것 같아서 에러와 싸우다가 제대로 알게 된 것이라도 기록해두고자 한다ㅜ_ㅜ

1. JoinClumn

  1. mappedBy reference an unknown target entity property , Repeated column in mapping for entity 에러
  • 원인 : JoinColumn 매개변수
    1. @JoinColumn(name=”이 테이블에서 쓸 컬럼명”, referencedColumnName=”참조할 테이블의 컬럼명”) 인데, 각 속성에 뭘 써야하는지 정확히 알지 못했었다.

    2. 그래서 매핑이 제대로 안됐고, 처음엔 name 값에 study 테이블이 가지고 있는 컬럼을 써야한다고 생각해 User와 Study 둘 다 “id”라는 값을 넣어서 repeated column 에러가 난 것 같다.
            // ScoreCard의 복합키를 저장하는 ScorecardId 클래스
            @Data
            @NoArgsConstructor
            @ToString
            @Embeddable
            public class ScorecardId implements Serializable {
                // 채점표를 위한 복합키 - 회원 참조
                @ManyToOne(targetEntity = User.class)
                @JoinColumn(name="user_id",referencedColumnName="id")
                private User user_id;
            
                // 채점표를 위한 복합키 - 스터디 참조
                @ManyToOne(targetEntity = Study.class)
                @JoinColumn(name="study_id",referencedColumnName="id")
                private Study study_id;
            
            }

2. MappedBy 매개변수

  1. collection foreign key mapping has wrong number of columns 에러
  • 원인 : @OnetoMany(MappedBy=~) 매개변수
  • 복합키 클래스가 참조한다고 표기할 때, 복합키 클래스의 어떤 컬럼이 참조하는지까지 써주어야 했음.
  • @OnetoMany(mappedBy=”many쪽 기준 컬럼”)
  • 이 때 위처럼 ScorecardId의 study_id가 참조하는 것이면 .으로 이어서 써준다
        // ScorecardId가 참조하는 Study 클래스 
        @OneToMany(mappedBy = "score_id.study_id", cascade = CascadeType.ALL)
            private List<Scorecard> scorecards = new ArrayList<>();
        }

3. JPA → MySql 자료형

  1. Boolean : JPA에서 Boolean으로 설정하면 DB에는 bit로 저장이 된다. 때문에 해당 자료형에 아래처럼 어노테이션을 추가해 bit 말고 tinyInt로 저장되게 하자! (0,1로 설정 후 java에서 자동으로 True, False 변환되도록)
  2. Long
    • JPA에서 Long으로 지정했을 시, DB에는 BigInt로 들어간다. 참고!
profile
야금야금 앱 개발자

0개의 댓글