2016년 12월 14일 수요일

[자바교육,스프링교육,JPA교육학원_탑크리에듀][JPA에러]Cannot create TypedQuery for query with more than one return using requested result type

[JPA에러]Cannot create TypedQuery for query with more than one return using requested result type


[엔티티]

@Entity
@Getter
@Setter
@NamedQuery(name="Emp.findBySalNamed",
            query="select e.empno, e.ename from Emp e where e.sal > :sal")
public class Emp { 
@Id
@GeneratedValue
private Long empno;
private String ename;
private String job;
private Long sal;
@ManyToOne
@JoinColumn(name = "deptno")
private Dept dept;
}

자바코드에서...

List<Emp> result = em.createNamedQuery("Emp.findBySalNamed", Emp.class)
                .setParameter("sal", 2000)
                .getResultList();

JPQL 또는 NamedQuery의 쿼리구문에서 리턴결과 타입을 클래스타입으로 하고 위의 경우처럼 
필드명을 쓴 경우 타입이 여러개라는 오류가 발생한다.
(Cannot create TypedQuery for query with more than one return using requested result type)


Select되는 결과 타입을 Emp.class로 했으면 다음과 같이 NamedQuery를 수정해야 한다.
@NamedQuery(name="Emp.findBySalNamed",
            query="select e from Emp e where e.sal > :sal")

물론 JPQL을 직접사용했을 때도 동일하다.

String someJPQL = "select e.empno, e.ename from Emp e where e.sal > :sal";
em.createQuery(someJPQL, Media.class);

=>

String someJPQL = "select e from Emp e where e.sal > :sal";

댓글 없음:

댓글 쓰기