当前位置: 首页 > 知识库问答 >
问题:

NativeQuery Spring数据返回对象

阎博易
2023-03-14

我需要在Spring数据中实现一个查询,如下所示:-

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;
@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<MyObj> getTotalActivityMinutesByUserType(String userType);
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<MyObj> objA = myRepository.getTotalActivityMinutesByUser("TEST");

}

我得到以下异常:-

org.springframework.core.convert.conversionFailedException:未能将值“{TEST,5.0}”的类型[java.lang.object[]]转换为类型[com.mycomp.myobj];嵌套异常是org.springframework.core.convert.converterNotFoundException:找不到能够从[java.lang.string]类型转换为[com.mycomp.dto.myobj]类型的转换器

@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中的联接查询应该是什么样子...

共有1个答案

商辰钊
2023-03-14

只需使用投影和JPQL查询:

public interface NameAndDuration {
    String getName();
    Long getDuaration();
}

@Query("select u.name as name, sum(a.minutes) as duration from User u join u.activityStatus st join st.activity a where st.status = "COMPLETED" and u.type = ?1 group by u.name")
List<NameAndDuration> getNameAndDurationByUserType(String userType);

List<NameAndDuration> list = getNameAndDurationByUserType("TEST");
String userName = list.get(0).getName();

这个查询可能不是您所需要的,因为我不知道实体类的结构。但如果你给他们看我会纠正这个问题...

 类似资料:
  • 问题内容: Python pandas具有pct_change函数,可用于计算数据帧中股票价格的回报: 我正在使用以下代码获取对数返回值,但它给出的值与pct.change()函数完全相同: 问题答案: 这是一种使用来计算日志返回的方法。结果与所计算的总收益相似但不相同。您可以上传示例数据的副本(Dropbox共享链接)以重现您看到的不一致之处吗?

  • 注意:请通读后再回答。这看起来是一个简单的问题,但我不确定它是否如此简单。另外,我是打字新手,所以对我宽容点 所以这是用例。我有一个模型用户,我编写了一个通用函数来根据数据库中的电子邮件检查用户是否存在。如果存在,则返回用户对象。 现在,如果它是任何其他对象,那么我可以定义类型并继续我的代码,但它是我从DB得到的用户对象,不知道如何解决这个问题。 我通过提到返回类型“any”找到了解决方法,但我的

  • 问题内容: 如何从AsyncTask中获取数据?我的MainActivity正在调用触发AsyncTask的DataCall.getJSON函数,但是我不确定如何将数据返回到原始Activity。 调用DataCall的MainActivity应该返回一个字符串并将其保存在 数据通话: 问题答案: 对我来说,关键是创建一个名为URLWithParams的类或其他类,因为AsyncTask将只允许发

  • 问题内容: 每次我运行mysql_fetch_array时,返回带有重复值的数组, 例如 但我只想要数组中的单个结果,我尝试使用 但这没有区别。 问题答案: 这是的预期功能。如果您不希望有“重复项”,而只是具有关联数组,请改用。 例:

  • 问题内容: 我正在尝试使用Node.JS应用程序来发出和接收API请求。它使用Axios对其接收的API调用接收的数据向另一个服务器发出get请求。第二个片段是脚本从调用中返回数据的时间。它实际上会接收并写入控制台,但不会在第二个API中将其发送回去。 … 我知道这是错误的,我只是想找到一种使它起作用的方法。我似乎只能从中获取数据的唯一方法是通过console.log,这对我的情况没有帮助。 问题

  • 我正在尝试使用Node.JS应用程序发出和接收API请求。它使用Axios向另一台服务器发出get请求,并从它接收的API调用中接收数据。第二个代码段是脚本从调用返回数据的时间。它实际上会将其写入控制台,但不会在第二个API中将其发送回。 ... 我知道这是错误的,我只是想找到一种方法让它发挥作用。我能从中获取数据的唯一方法似乎是通过console.log,这对我的情况没有帮助。