나는이처럼 보이는 쿼리 주석 스프링 JPA의 REPO 있습니다. 요청한 필드 유형에 해당하는 Object [] 목록을 반환합니다.봄 JPA 반환 필드 만이 아니라 실체는
무슨 일 이니? 이 같은
나는이처럼 보이는 쿼리 주석 스프링 JPA의 REPO 있습니다. 요청한 필드 유형에 해당하는 Object [] 목록을 반환합니다.봄 JPA 반환 필드 만이 아니라 실체는
무슨 일 이니? 이 같은
는 JPA 엔티티 (또는 여러 기관)에서, 즉, 필드의 세트를 Object[]
의 목록을 반환합니다.
스프링 데이터 JPA 사용하면 Object[]
을 피할 수 있으며, 다음과 같이 인터페이스를 정의하여 더 우아한 형식에 데이터를 반환 :
public interface MainEntityProjection {
String getStart();
String getFinish();
String getForename();
String getSurname();
}
그리고 위의 정의 된 인터페이스를 반환하는 쿼리 방법을 변경 :
@Query("SELECT e.start, e.finish, e.forename, e.surname " +
"FROM MainEntity e " +
"WHERE e.volunteerId = :id AND e.areaId > 0 AND e.isAssignment = true " +
"ORDER BY e.start")
List<MainEntityProjection> findAssignments(@Param("id") int volunteerId);
이 접근법은 Spring Data JPA documentation에 설명되어 있습니다.
SELECT NEW
으로 처리합니다. 당신은 다음과 같은 클래스를 정의합니다 :
public class MainEntityProjection {
private String start;
private String finish;
private String forename;
private String surname;
public MainEntityProjection(String start, String finish,
String forename, String surname) {
this.start = start;
this.finish = finish;
this.forename = forename;
this.surname = surname;
}
// Getters and setters
}
을 그리고 같은 다음 쿼리는 다음과 같습니다
는 위의 쿼리는 또한 스프링 데이터 JPA와 함께 작동 할 것으로 예상된다SELECT NEW org.example.MainEntityProjection(e.start, e.finish, e.forename, e.surname)
FROM MainEntity e
WHERE e.volunteerId = :id AND e.areaId > 0 AND e.isAssignment = true
ORDER BY e.start
이 (당신의 방법의 목록을 반환합니다 MainEntityProjection
).
이 SELECT 절
에서 4.8.2 생성자 표현이 생성자를 사용할 수있다 다음 JSR 338는 JPA 2.1을 정의하는 문서,
SELECT NEW
및 생성자 표현을 사용하는 방법에 대해 말씀확인
SELECT
목록에서 Java 클래스의 인스턴스를 리턴하십시오. 지정된 클래스는 엔티티이거나 데이터베이스에 맵핑 될 필요가 없습니다. 생성자 이름은 정규화 된 이름이어야합니다.
SELECT NEW
절에 생성자 이름으로 엔터티 클래스 이름이 지정되면 결과 개체 인스턴스는 생성 된 개체에 대한 기본 키가 검색되는지 여부에 따라 새 상태 또는 분리 된 상태가됩니다.만약 single_valued_path_expression 또는 생성자 인수 엔티티를 참조하여 얻어진 참조 엔티티 인스턴스 identification_variable 그 single_valued_path_expression 또는 identification_variable 관리 상태에있을 것이다. 예를 들어
는SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count) FROM Customer c JOIN c.orders o WHERE o.count > 100
쓰기 :
@Query("from MainEntity e where e.volunteerId= :id "
+ "and e.areaId>0 and e.isAssignment=true order by e.start")
당신은 JPQL –
에서 "SELECT e"를 놓친 것처럼 보입니다. "select e"없이도 사용할 수 있습니다. – coenni
당신이 JPA 스펙을 준수한다면 오류가 없습니다. –
당신은 개체 만의 필드를 요청하지 않습니다. 반면에 객체 배열이 리턴되었습니다. 시도해보십시오. 조회가 프로젝션와 목록을 반환 할 때 정의에
Select e from MainEntity e ...
당신은 MainEntity의 e'에서'선택 전자를 시도? –
나는 그것에 대해 궁금해했다. 나는'select * ...'와'select e. *'를 시도했지만 실패했다. – NickJ
'SELECT e FROM MainEntity e'는 전체 엔터티를 반환합니다. 일련의 필드가 필요하면 내 [answer] (http://stackoverflow.com/a/43331990/1426227)을 확인하십시오. –