반응형
나는 초보자이고 Google에 시도했지만 내 쿼리를 해결할 수 없습니다. 도와주세요.
POJO 클래스 PersonC의 PersonA와 Person의 두 엔티티를 매핑하려고합니다.
@Entity
class PersonA{
String sample_field;
}
@Entity
class Person{
String id;
String name;
}
위의 두 개는 jpa의 엔티티입니다.
이제 하나의 pojo 클래스로 병합하고 싶습니다.
class PersonC
{
Strind id;
String address;
}
아래 코드를 시도했지만 주소 / 외래 키 필드를 가져 오려고하면 작동하지 않습니다.
@SqlResultSetMapping(name="PersonC",
classes = {
@ConstructorResult(targetClass = PersonC.class,
columns = {@ColumnResult(name="name")
, @ColumnResult(name="address")
)}
위의 클래스에 대해 @SqlResultSetMapping을 어디에서 정의해야합니까? ) })
해결 방법
@SqlResultSetMapping
은 모든 엔티티 클래스에 배치 할 수 있습니다 (POJO에 주석을 달지 마십시오. 작동하지 않음). @ConstructorResult
를 사용하여 POJO 클래스에 매핑은 JPA 버전 2.1에서 추가되었습니다. 매핑과 함께 사용되는 POJO에는 올바른 생성자가 있어야합니다.
의도 된 생성자의 인수에 해당하는 모든 열은 생성자의 인수 목록과 동일한 순서로 ConstructorResult 주석의 columns 요소를 사용하여 지정되어야합니다.
쿼리 사용과 함께 다음 예제를 참조하고 그에 따라 사례를 해결하십시오.
@Entity
public class Address {
@Id int id;
String street;
}
@SqlResultSetMapping(name="PersonDTOMapping",
classes = {
@ConstructorResult(targetClass = PersonDTO.class,
columns = {@ColumnResult(name="name"), @ColumnResult(name="street")}
)}
)
@Entity
public class Person {
@Id int id;
String name;
Address address;
}
public class PersonDTO {
String name;
String street;
public PersonDTO(String name, String street) {
this.name = name;
this.street = street;
}
}
// usage
Query query = em.createNativeQuery(
"SELECT p.name AS name, a.street AS street FROM Person p, Address a WHERE p.address_id=a.id",
"PersonDTOMapping");
List<PersonDTO> result = query.getResultList();
별칭 ( AS name
및 AS street
)은 @ColumnResult
의 이름과 일치해야합니다.
예제는 Ecliselink 2.5.1에 대해 테스트되었습니다.
참조 페이지 https://stackoverflow.com/questions/25179180
반응형
'MySql' 카테고리의 다른 글
MySQL 라 라벨 단순 월 선택 (0) | 2020.12.02 |
---|---|
MySQL ImportError : 큐라는 모듈이 없습니다. (0) | 2020.12.02 |
MySQL 이 PDO 준비 문은 false를 반환하지만 오류를 발생시키지 않습니다. (0) | 2020.12.02 |
MySQL-mysqldump-루틴은 모든 루틴이 아닌 하나의 저장 프로 시저 (이름 별) 만 내보내는 루틴 (0) | 2020.12.02 |
MySQL 구문 분석 오류 : 구문 오류, 예기치 않은 'INTO'(T_STRING) 7 행 (0) | 2020.12.02 |
댓글