我正在为运行保龄球游戏的webapp编写代码。玩家得分保存在数据库中,因此可以检索前十名以便在主页上看到。问题是,我无法访问从数据库中检索分数的方法返回的arraylist中的值。
这是一个JUnit测试方法:(CDR是顶级播放器,应该断言为true)
<!-- language: c# -->
public class DatabaseTest {
ScoreDB sdbTest = new ScoreDB();
@Test
public void testTopPl(){
assertTrue(sdbTest.listTopPlayers().get(0).getName() == "CDR");
}
}
这是数据库检索代码:
public List<Player> listTopPlayers( ){
Transaction trns = null;
Session session = HibernateUtil.getSessionFactory().openSession();
List<Player> topPlayers = new ArrayList<Player>();
try {
trns = session.beginTransaction();
List<Player> players = session.createQuery("FROM Player").list();
Collections.sort(players, new ScoreComparator());
for (int i=0; i<10; i++){
topPlayers.add(players.get(i));
}
// System.out.print(topPlayers.get(0).getName() + " test");
trns.commit();
trns = session.beginTransaction();
}catch (RuntimeException e) {
if(trns != null){
trns.rollback();
}
e.printStackTrace();
} finally{
session.flush();
session.close();
}
return topPlayers;
}
}
答案 0 :(得分:0)
首先,你应该在数据库中使用order by,在查询中使用setMaxResults只能回溯前10个。否则你可能会遇到内存问题。
第二,你打算两次开始交易。只执行一次,此外,您处于不执行事务的只读操作中。
Finnaly发布您的问题,您是否获得了一些空指针或分离的权限异常?如果您正在获取detatched实体,请在您正在阅读的属性中使用Hibernate.initialize。
当然,使用EQUALS来比较String。 这可能是你真正的问题。切勿使用“==”运算符比较Java中的字符串。
希望这些提示有用。