我想使用此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]


实现此目的的正确方法是什么?

最佳答案

您的查询返回两个对象tokenname,而不是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/

10-14 15:34
查看更多