인프런 커뮤니티 질문&답변

net1506님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

소개

에러가 나는데 .. 확인 부탁드립니다

21.06.21 17:39 작성

·

9.8K

0

Member member = new Member();
member.setUsername("kim");
em.persist(member);

List<Member> resultList = em.createNativeQuery(
"select MEMBER_ID, city, street, zipcode, USERNAME from MEMBER")
.getResultList();

for (Member member1 : resultList) {
System.out.println("member1.getUsername() = " + member1.getUsername());
}

java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class jpabook.jpashop2.domain.Member ([Ljava.lang.Object; is in module java.base of loader 'bootstrap'; jpabook.jpashop2.domain.Member is in unnamed module of loader 'app')

at jpabook.jpashop2.JpaMain.main(JpaMain.java:66)

6월 21, 2021 5:34:08 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop

INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/jpashop2]

6월 21, 2021 5:34:08 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections close

ERROR: Connection leak detected: there are 1 unclosed connections upon shutting down pool jdbc:h2:tcp://localhost/~/jpashop2

 형변환 할수 없다고 하는 에러가 나는데요..

List<Member> resultList = em.createNativeQuery(
"select MEMBER_ID, city, street, zipcode, USERNAME from MEMBER", Member.class)
.getResultList();

이렇게 고치면

ERROR: Column "INSERT_MEMBER" not found [42122-200]

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)

at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1613)

at org.hibernate.query.Query.getResultList(Query.java:165)

at jpabook.jpashop2.JpaMain.main(JpaMain.java:63)

이런 에러가 나오고요...

그래서 Member 에서 BaseEntity를 extends 를 않하면

잘 돌아갑니다... 이유가 뭘까요??

BaseEntiy도 첨부하겠습니다

답변 3

2

OMG님의 프로필 이미지

2021. 06. 22. 06:41

안녕하세요 net1560님.

단순 값을 뽑아오고 싶으신거면

List<Member> results = em.createQuery("select m from Member m", Member.class).gerResultList();

.

다음과 같이 createQuery를 jpql로 작성해서 모든 필드를 담은 객체를 타입 명시를 함께 진행하시면 List로 뽑아오실 수 있으실거에요.

위에서는 네이티브 쿼리로 특정 필드를 출력(반환)하도록하였기 때문에 그걸 받을 수 있는 Object 타입의 배열로 처리된거 같네요.

처음 본문에서 남기신 문제는 em.find(baseEntity)를 사용하신게 아니라면 당시 재현가능한 Main메서드의 코드가 있어야 할 것 같습니다.

2

net1506님의 프로필 이미지
net1506
질문자

2021. 06. 22. 00:31

리턴값보고 수정하니깐 되네요...

이게 맞는지 모르겠습니다만 이제 작동은 하네요

0

OMG님의 프로필 이미지

2021. 06. 21. 21:25

안녕하세요 net1506님.

BaseEntity의 @Column(name="INSERT_MEMBER")와 @Column(name="UPDATE_MEMBER")에서 문제가 발생하는 걸로 보이는데 직접 해결해보시겠어요?

영한님께서는 https://www.inflearn.com/questions/227574
의 댓글의 답글에서도 보시다시피 

"답을 바로 드릴 수도 있지만, 그러면 LPD Code님이 더 많은 것을 얻어가실 수 없다 생각합니다."

직접 해결해볼 수 있을 법한 문제에 대해선 수강생분에게 일단 해결을 맡기시거든요. net1506님도 문제 해결을 위해 코드를 이리저리 바꿔보시기도 하셨고, 어느정도 해결의 힌트도 드렸다고 생각하기에 net1506님이 문제 해결을 일단 한번 해보시고 그래도 잘 모르겠다 싶으시면 댓글 남겨주세요.

.

감사합니다.

net1506님의 프로필 이미지

작성한 질문수

질문하기