작성
·
9.9K
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
안녕하세요 net1560님.
단순 값을 뽑아오고 싶으신거면
List<Member> results = em.createQuery("select m from Member m", Member.class).gerResultList();
.
다음과 같이 createQuery를 jpql로 작성해서 모든 필드를 담은 객체를 타입 명시를 함께 진행하시면 List로 뽑아오실 수 있으실거에요.
위에서는 네이티브 쿼리로 특정 필드를 출력(반환)하도록하였기 때문에 그걸 받을 수 있는 Object 타입의 배열로 처리된거 같네요.
처음 본문에서 남기신 문제는 em.find(baseEntity)를 사용하신게 아니라면 당시 재현가능한 Main메서드의 코드가 있어야 할 것 같습니다.
2
0
안녕하세요 net1506님.
BaseEntity의 @Column(name="INSERT_MEMBER")와 @Column(name="UPDATE_MEMBER")에서 문제가 발생하는 걸로 보이는데 직접 해결해보시겠어요?
영한님께서는 https://www.inflearn.com/questions/227574
의 댓글의 답글에서도 보시다시피
"답을 바로 드릴 수도 있지만, 그러면 LPD Code님이 더 많은 것을 얻어가실 수 없다 생각합니다."
직접 해결해볼 수 있을 법한 문제에 대해선 수강생분에게 일단 해결을 맡기시거든요. net1506님도 문제 해결을 위해 코드를 이리저리 바꿔보시기도 하셨고, 어느정도 해결의 힌트도 드렸다고 생각하기에 net1506님이 문제 해결을 일단 한번 해보시고 그래도 잘 모르겠다 싶으시면 댓글 남겨주세요.
.
감사합니다.