MappingException: Could not determine type for: java.util.List (String, Integer 등)

Yunny.Log ·2022년 5월 29일
1

Debugging

목록 보기
14/69
post-thumbnail
    private List<String> cField;
  • 위와 같이 entity의 필드를 정의해주면 오류
  • 원래 List로 엔티티에 필드 설정해주면 관계 명시해주어야 해 (Many To One, One To Many & Mapped By)
  • 근데 지금 저렇게 제네릭 타입으로 변수를 설정해준다면 (Integer, Float, String 같이)
    위에 어노테이션 추가가 필요
(targetClass=Integer.class) is only needed when your list is of a generic type

https://stackoverflow.com/questions/6164123/org-hibernate-mappingexception-could-not-determine-type-for-java-util-set

그러나 이렇게 만들면 문자열이 필드안에 저장되는 것이 아닌
자기 혼자 String이름으로 된 엔티티를 만들고, 엔티티와스트링이름의 다대다 테이블을 알아서 생성한다.

    @Column
    @ElementCollection(targetClass=String.class)
    private List<String> cField;

예를 들어 내가 위와 같이 cField라고 이름을 붙이고 엔티티안의 필드를 만들었을 때 아래와 같은 오라클 테이블이 형성된다.

c_field가 자체적으로 분리돼서 내가 만든 엔티티와 따로 테이블을 만든다.
따라서 그냥 choice field 테이블을 따로 만드는게 더 보기 좋을 듯 하다는 생각이 드네

0개의 댓글