INSERT를 시도해보고 싶은데 에러가 발생합니다.
[질문 내용]
maven이 아니라 gradle로 시도를 해보고 싶어서
스프링부트로 생성하여 진행을 해봤는데
em.persist(member);를 실행할때 에러가 발생하는데
도저히 원인을 못찾겠는데 혹시 어떤 문제인지 아시나요?
package com.example.demo.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class Member {
@Id
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.example.demo.entity.Member;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
@SpringBootApplication
public class StudySpringJpaApplication {
public static void main(String[] args) {
SpringApplication.run(StudySpringJpaApplication.class, args);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); //애플리케이션 전체 공유 (persistence.xml 참조)
EntityManager em = emf.createEntityManager(); //한번 쓰고 버려야함, 쓰레드간 공유하지 않음
EntityTransaction tx = em.getTransaction(); //조회를 제외한 DML 작업시 필수로 사용
tx.begin();
try {
Member member = new Member();
member.setId(1L);
member.setName("memberA");
em.persist(member);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
System.out.println("=== ROLLBACK 진행 ===");
} finally {
em.close();
}
emf.close();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<!-- EntityManagerFactory 생성 시 사용되는 persistence name -->
<persistence-unit name="hello">
<class>com.example.demo.entity.Member</class>
<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="비밀번호"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3307/jpa?characterEncoding=UTF-8&serverTimezone=UTC"/>
<!-- 하이버네이트 사용 시 다른 DB에서 MySQL 문법을 사용 가능하도록 변경.-->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL57Dialect"/>
<!-- 콘솔에 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>
에러는 다음과 같이 발생합니다.
jakarta.persistence.PersistenceException: Converting `org.hibernate.property.access.spi.PropertyAccessException` to JPA `PersistenceException` : Error accessing field [private java.lang.Long com.example.demo.entity.Member.id] by reflection for persistent property [com.example.demo.entity.Member#id] : com.example.demo.entity.Member@1bc6c7f0
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:165)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:175)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:182)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:743)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:721)
at com.example.demo.StudySpringJpaApplication.main(StudySpringJpaApplication.java:29)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Long com.example.demo.entity.Member.id] by reflection for persistent property [com.example.demo.entity.Member#id] : com.example.demo.entity.Member@1bc6c7f0
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:48)
at org.hibernate.metamodel.mapping.internal.BasicEntityIdentifierMappingImpl.getIdentifier(BasicEntityIdentifierMappingImpl.java:148)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:5269)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4856)
at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:293)
at org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:59)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:93)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:53)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107)
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:737)
... 7 more
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.example.demo.entity.Member.id to com.example.demo.entity.Member
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at java.base/jdk.internal.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
at java.base/java.lang.reflect.Field.get(Field.java:425)
at org.hibernate.property.access.spi.GetterFieldImpl.get(GetterFieldImpl.java:44)
... 16 more
=== ROLLBACK 진행 ===
답변 1
0
안녕하세요. leews0724님, 공식 서포터즈 OMG입니다.
.
maven이 아닌 gradle로 진행하고 계신가보네요. 본 강의는 의존성 관리를 maven으로 하는지 gradle로 하는지가 핵심이 아니여서 영한님께서도 maven으로 진행을 권장드리고 있으며 , gradle 설정이 간단히 되면 좋겠지만 복잡한 관계로 저희도 gradle로 진행한 개발 환경 세팅이 없어서 제공해드리지 못함을 양해 부탁드립니다.
maven으로 진행하실 때 문제가 발생하는 부분에 대해선 언제든 질문 남겨주시면 도움 드리겠습니다 :)
.
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
28
2
inheritance startegy 선택시 고려사항
0
22
1
Entity 동등성 비교
0
21
1
실무 조언 관련 질문입니다.
0
47
1
H2데이터베이스 파일 생성
0
56
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
53
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
52
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
60
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
94
2
UnsupportedOperationException 발생
0
86
3
H2 Database 연결이 안됩니다.
0
95
2
연관관계 매핑 질문드립니다.
0
85
2
h2데이터베이스 실행오류
0
108
2
persistence.xml
0
108
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
80
1
영속성 컨텍스트
0
66
1
JPA 프록시
0
96
1
Native Query와 MyBatis
0
70
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
87
1
임베디드 타입 예시 코드 관련 질문
0
115
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
95
3
인텔리제이 패키지 커서 단축키 질문
0
108
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
145
1





