我想使用此HQL查询以选择表行值:
String hql = "select e.token, e.name from Terminals e where e.token = ?";
Terminals terminal = entityManager
.createQuery(hql, Terminals.class)
.setParameter(0, terminalToken)
.getSingleResult();
但是我得到这个结果:
java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return using requested result type [org.api.entity.Terminals]
实现此目的的正确方法是什么?
最佳答案
您的查询返回两个对象token
和name
,而不是Terminals
对象。
相反,您可以使用:
Object[] obj = entityManager
.createQuery(hql)
.setParameter(0, terminalToken)
.getSingleResult();
if(obj != null){
Terminals terminal = new Terminals((String) obj[0], (String) obj[1]);
}
或者,您可以在Terminals类中创建一个构造函数,该构造函数包含两个字段:
public Terminals(String token, String name){
this.token = token;
this.name = name;
}
然后将您的代码更改为:
String hql = "select new com.package.Terminals(e.token, e.name) from Terminals e where e.token = ?";
Terminals terminal = entityManager
.createQuery(hql, Terminals.class)
.setParameter(0, terminalToken)
.getSingleResult();
关于java - 使用带有参数的HQL选择表行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51469137/