我需要在Spring Data中实现这样的查询: –
Select User.name, sum(Activity.minutes)
From User, Activity, ActivityStatus
Where User.id = ActivityStatus.userId
And Activity.id = ActivityStatus.activityId
AND ActivityStatus = "COMPLETED"
GROUP BY user.name;
所以我需要加入3个表,因此我必须使用带有nativeQuery = true的@Query(如果我错了,请纠正我)
所以我的Repository方法看起来像这样: –
@Query(value = "Select User.name, sum(Activity.minutes) as total_minutes
From User, Activity, ActivityStatus
Where User.id = ActivityStatus.userId
And Activity.id = ActivityStatus.activityId
AND ActivityStatus = "COMPLETED"
AND User.Type = ?1
GROUP BY user.name;",
nativeQuery = true
)
List getTotalActivityMinutesByUserType(String userType);
MyObj类看起来像这样: –
public class MyObj {
String name;
long total_minutes;
// getter and setter methods
public MyObj(String name, long total_minutes) {
this.name = name;
this.total_minutes = total_minutes;
}
}
我的测试方法: –
@Test
public void TotalActivityTest() throws Exception {
List objA = myRepository.getTotalActivityMinutesByUser("TEST");
}
我得到以下例外: –
org.springframework.core.convert.ConversionFailedException: Failed to
convert from type [java.lang.Object[]] to type
[com.mycomp.MyObj] for value ‘{TEST, 5.0}’; nested
exception is
org.springframework.core.convert.ConverterNotFoundException: No
converter found capable of converting from type [java.lang.String] to
type [com.mycomp.dto.MyObj]
我需要一种方法将结果作为MyObj返回. (或者至少是将它投射到MyObj的方法)这可能吗?
编辑:
从@ Cepr0的回答构建My Entity类看起来像这样: –
@Entity
public class ActivityStatus extends Base {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private Activity activity;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
private User user;
}
我不确定JPQL中的JOIN查询应该如何…