Hibernate NamedQuery,设置值
Hibernate NamedQuery, set values
晚上好!我正在尝试将查询中的值设置为包装器 class TestWrapper
TestWrapper class:
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 class:
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;
}
我得到一个 expeption:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.bionic.wrappers.TestWrapper
谢谢!
我没有足够的上下文,但在 getAvailableTestsNames 方法中。看起来您正在通过 returning "test.testName, test.duration" 进行 returns 标量结果的查询,您可能只想 return 一个 TestWrapper 列表,因此查询应该只是" from XXX" ,您可以省略 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.
晚上好!我正在尝试将查询中的值设置为包装器 class TestWrapper
TestWrapper class:
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 class:
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;
}
我得到一个 expeption:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.bionic.wrappers.TestWrapper
谢谢!
我没有足够的上下文,但在 getAvailableTestsNames 方法中。看起来您正在通过 returning "test.testName, test.duration" 进行 returns 标量结果的查询,您可能只想 return 一个 TestWrapper 列表,因此查询应该只是" from XXX" ,您可以省略 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.