Hello

[JPA] PK가 아닌 컬럼을 사용하여 연관관계 설정 본문

java

[JPA] PK가 아닌 컬럼을 사용하여 연관관계 설정

nari0_0 2024. 1. 3. 08:50
728x90

 

@ManyToOne 관계 매핑 시 연관 테이블의 PK가 아닌 컬럼으로 관계 매핑 설정 시 ClassCastException이 발생하게 됩니다. 에러 내용을 보면 해결 방법이 나와 있어 문제 해결 하는 방법은 간단 합니다. 연관된 엔티티 객체가 Serializable를 구현하는 것 입니다.

java.lang.ClassCastException: com.example.demo.ServerInfoEntity cannot be cast to java.io.Serializable

 

예시 테이블을 사용해 방법과 이유에 대해 간략히 설명합니다.

 

FK 컬럼 조인 방법

  • @JoinColumn 조인할 컬럼명 referencedColumnName 명시
  • 연관 엔티티 객체가 Serializable 구현
@Entity
@Table(name = "tb_config")
public class ConfigEntity {
    @Id
    private Integer id;
    @ManyToOne
    @JoinColumn(name = "server_info_key", referencedColumnName = "server_key")
    private ServerInfoEntity serverInfo;
    private String value;
    private String desc;
}


@Entity
@Table(name = "tb_server_info")
public class ServerInfoEntity implements Serializable {
    @Id
    private Integer id;
    private String serverName;
    private String serverKey;
    private String address;
    private String desc;
}

 

 

 

Hibernate가 제공하는 BasicType - Serializable

hibernate docs 5.1

표시될 수 있는 Java 유형

hibernate docs 5.1

POJO 엔터티 클래스에 대한 요구 사항

hibernate docs 5.1

엔터티 클래스 요구 사항 (JAVA DOCS)

java docs 7

참고 :

https://docs.oracle.com/javaee/7/tutorial/persistence-intro001.htm#BNBQA

https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/Hibernate_User_Guide.html

https://www.baeldung.com/jpa-entities-serializable#2-hibernate-joincolumn-annotation

https://vladmihalcea.com/how-to-map-a-manytoone-association-using-a-non-primary-key-column/

https://multifrontgarden.tistory.com/284

https://www.inflearn.com/questions/16570/%EB%B2%84%EA%B7%B8-%EB%AC%B8%EC%9D%98%EB%93%9C%EB%A0%A4%EB%B4%85%EB%8B%88%EB%8B%A4

728x90