gpt4 book ai didi

java - 从 native 查询和转换中检索数据

转载 作者:行者123 更新时间:2023-11-30 07:41:16 26 4
gpt4 key购买 nike

我有以下查询

@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());
}

据我所知,它返回字符串列表?由于我收到的错误

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to entities.Player at 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 页面,以便检索查询结果?

最佳答案

您的 copyPlayersToDetails() 方法需要一个 Player 实体列表,而不是 String 列表。这就是为什么您会在此处收到 ClassCastException 的原因:

Player player = (Player) i.next();

因为i.next()返回一个String。你的Java编译器没有提示的原因是Query.getResultList() (不幸的是)返回一个原始类型列表。

您应该将 native 查询更改为:

@Override
public List<PlayerDetails> testPlayerQuerry() {
return copyPlayersToDetails(em.createNativeQuery("select p.* 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", Player.class).getResultList());
}

进一步批评

  • 您(可能)应该使用绑定(bind)变量
  • 您无需加入Game table

改为这样写:

@Override
public List<PlayerDetails> testPlayerQuerry() {
return copyPlayersToDetails(em.createNativeQuery("select p.* from player p\n"
+ "join Player_Game pg on p.player_id = pg.fk_player_id\n"
+ "where pg.fk_game_id = :1", Player.class).setParameter(1, 2).getResultList());
}

关于java - 从 native 查询和转换中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34666244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com