기타/오류

[Problem] JPA Unknown entity

배발자 2023. 1. 6.
반응형

 

Member 객체를 em.persist() 할려고 할 때 개체를 알 수 없다는 오류가 떴다. 

entity 로 인식을 못한다는 오류라 persistence.xml 의 설정의 추가작업이 필요하다. 

 

여러 정보를 찾아본 결과 스프링에서 자동으로 매핑 개체를 찾아준다고 들었는데 아마 버전의 문제인지는 더 찾아봐야알거 같다. 일단 필자는 다음과 같이 해결했다. 

 

package com.example.demo;

import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Table(name = "member")
@Getter
@NoArgsConstructor
public class Member {

    @Id
    @Column(name = "member_pk", nullable = false)
    private Integer memberPk;

    @Column(name = "member_id")
    private String memberId;
    @Column(name = "member_pw")
    private String memberPw;

    public Member(Integer memberPk, String memberId, String memberPw) {
        this.memberPk = memberPk;
        this.memberId = memberId;
        this.memberPw = memberPw;
    }

    public Integer getMemberPk() {
        return memberPk;
    }

    public void setMemberPk(Integer memberPk) {
        this.memberPk = memberPk;
    }

    public String getMemberId() {
        return memberId;
    }

    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }

    public String getMemberPw() {
        return memberPw;
    }

    public void setMemberPw(String memberPw) {
        this.memberPw = memberPw;
    }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">

    <persistence-unit name="hello">

        <properties>
            <!-- 필수 속성 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="ssafy"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&amp;serverTimezone=UTC"/>

            <!-- 하이버네이트 사용 시 다른 DB에서 MySQL 문법을 사용 가능하도록 변경.-->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
            <!-- 콘솔에 SQL 출력 여부 -->
            <property name="hibernate.show_sql" value="true"/>
            <!-- 가독성 높여주는 formatting 여부 -->
            <property name="hibernate.format_sql" value="true"/>
            <!-- Comment 확인 여부 -->
            <property name="hibernate.use_sql_comments" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

 

persistence.xml 에서 아래의 정보를 추가 입력하였다. 

 

    <persistence-unit name="hello">
        <class>com.example.demo.Member</class>
        <properties>

 

 

스프링 부트 2.4.7 에서 2.7.5 버전으로 바꾸니 

        <class>com.example.demo.Member</class>

이 부분이 없어도 자동으로 entity를 매핑시켜준다. 

반응형

댓글