我有兩個實體Student
和AppliedCourses
在JPA是有可能映射該定製結果加入
@Entity
public class Student {
@Id
private Long sid;
private String name;
private String address;
.
.
.
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "sid", referencedColumnName = "sid")
private Set<AppliedCourses> appliedCourses;
}
和
@Entity
public class AppliedCourses {
@Id
private Long apcid;
private Long sid;
private String courseName;
.
.
.
}
JPQL查詢與應用的課程,以獲取學生的實體是:
select s from Student s left join fetch s.appliedCourses ac where s.id=:sid
但要求是我只想選擇幾列在學生與應用課程集合沿
即,我想是這樣的:
select new com.foo.StudentStat(s.sid, s.name, s.appliedCourses)
from Student s left join fetch s.appliedCourses ac where s.sid=:sid
StudentStat結果類:
@Getter
@Setter
@AllArgsConstructor
public class StudentStat {
private Long sid;
private String name;
private Set<AppliedCourses> appliedCourses;
}
上面的查詢會引發以下異常:
Caused by: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list
有沒有其他方法可以達到這個要求?
你不能在構造函數表達式中使用MULTI-VALUED字段 –
有沒有其他的方法可以在jpa中實現呢?或者我應該將它們分成2個查詢? @Neil – harvey123
你可以做一個單一的查詢,返回s.name和ac。*,然後把所有的用戶代碼放在你需要的結構中,或許 –