晚上好!我正在尝试将查询中的值设置为包装类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();
}
我得到一个例外,我看到这里的值不合适:
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
谢谢!
答案 0 :(得分:1)
我没有足够的上下文,但在getAvailableTestsNames中。看起来你正在通过返回&#34; test.testName,test.duration&#34;来执行返回标量结果的查询。你可能只想返回一个TestWrapper列表,所以查询应该只是&#34;来自XXX&#34; ,你可以省略select 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的标量结果。执行查询
希望这有帮助
了Aa。