final List<Tuple> data =
em.createQuery("SELECT p.id AS i, p.membership AS m FROM Player p WHERE p.id IN :ids", Tuple.class)
.setParameter("ids", ids)
.getResultList();
这会产生错误“无法为具有多个返回值的查询创建 TypedQuery
”。我可以通过省略类型参数(并使用 Object[] 而不是 Tuple,正如我后来发现的那样)来解决这个问题:
@SuppressWarnings("unchecked")
final List<Object[]> data =
em.createQuery("SELECT p.id AS i, p.membership AS m FROM Player p WHERE p.id IN :ids")
.setParameter("ids", ids)
.getResultList();
但是有没有不需要未检查代码的解决方案呢?
最佳答案
元组实际上并不比数组更安全,对吗?
您在这里可以做的是使用构造函数表达式。在我的脑海中,这是这样的:
class PlayerMembership {
public final int id;
public final MembershipType membership;
public PlayerMembership(int id, MembershipType membership) {
this.id = id;
this.membership = membership;
}
}
List<PlayerMembership> data =
em.createQuery("SELECT NEW nl.bart.PlayerMembership(p.id, p.membership) FROM Player p WHERE p.id IN :ids", PlayerMembership.class)
.setParameter("ids", ids)
.getResultList();
这需要您编写一个新类来保存结果,但这通常非常简单。
关于java - 使用 JPA 选择元组的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8668183/