gpt4 book ai didi

java - Hibernate NamedQuery,设置值

转载 作者:行者123 更新时间:2023-12-01 10:51:03 26 4
gpt4 key购买 nike

晚上好!我正在尝试将查询中的值设置为包装类 TestWrapper

TestWrapper 类:

package com.bionic.wrappers;

public class TestWrapper {

private String name;
private int duration;

public TestWrapper(){
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getDuration() {
return duration;
}

public void setDuration(int duration) {
this.duration = duration;
}
}

这是我的查询:

@NamedQuery(name = "getAvailableTestsNames",
query = "SELECT test.testName, test.duration FROM Result result JOIN result.test test JOIN result.user user where user.id = :userId"

DAO类:

    public List<TestWrapper> getAvailableTestsNames(long id){
Query query = em.createNamedQuery("getAvailableTestsNames");
query.setParameter("userId", id);
return (List<TestWrapper>)query.getResultList();
}

我收到一个异常(exception),我发现此处的值设置不合适:

    public static Set<TestDTO> convertAvailableTestsToDTO(List<TestWrapper> tests){
Set<TestDTO> testDTOs = new HashSet<>();
for (TestWrapper test : tests){
TestDTO testDTO = new TestDTO(test.getName(), test.getDuration());
testDTOs.add(testDTO);
}
return testDTOs;
}

我得到一个期望:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.bionic.wrappers.TestWrapper

谢谢!

最佳答案

我没有足够的上下文,但在 getAvailableTestsNames 方法中。看起来您正在执行一个通过返回“test.testName, test.duration”返回标量结果的查询,其中您可能只想返回 TestWrapper 列表,因此查询应该只是“来自 XXX”,您可以省略选择field1,field2 ... hibernate 会为你做到这一点。

参见第 11.4.1.3 节。 https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch11.html#objectstate-querying 的标量结果与 11.4.1 相比。执行查询

希望这有帮助

啊。

关于java - Hibernate NamedQuery,设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33904693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com