【发布时间】:2016-04-12 11:57:32
【问题描述】:
我有以下查询
@Override
public List<PlayerDetails> testPlayerQuerry() {
return copyPlayersToDetails(em.createNativeQuery("select player_name from player p\n"
+ "join Player_Game pg on p.player_id = pg.fk_player_id\n"
+ "join Game g on pg.fk_game_id = g.game_id\n"
+ "where g.game_id = 2").getResultList());
}
据我所知,它返回字符串列表?由于我得到的错误
原因:java.lang.ClassCastException:java.lang.String 无法转换为entities.Player 在 utils.SessionFacade.copyPlayersToDetails(SessionFacade.java:105)
抛出错误的类可以很好地处理返回玩家字符串的查询,例如从玩家返回 *
private List<PlayerDetails> copyPlayersToDetails(List< Player> players) {
List<PlayerDetails> list = new ArrayList<PlayerDetails>();
Iterator i = players.iterator();
while (i.hasNext()) {
Player player = (Player) i.next();
PlayerDetails details = new PlayerDetails(player.getPlayerId(),
player.getPlayerName(), player.getPlayerRating());
list.add(details);
}
return list;
}
我必须如何转换此方法或如何(如果可能)将存储在此字符串列表中的这些值放入 JSF 页面,以便检索查询结果?
【问题讨论】:
-
Constructor expressions、Tuple queries 或
List<Object[]>可以使用,当查询返回元组列表时,即不完全限定实体的列表,如给定查询所做的那样,即当需要选定的字段。 (可以使用 JPQL 或条件来重构给定的 SQL 查询。在这种情况下无需触发本机查询)。
标签: java jpa jpql nativequery