0

我正在为运行保龄球游戏的 web 应用程序编写代码。球员成绩保存在数据库中,以便在主页上检索前十名。问题是,我无法访问从数据库中检索分数的方法返回的数组列表中的值。

这是一个 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; 
    }
}
4

1 回答 1

0

首先,您应该在数据库中使用 order by 并在查询中使用 setMaxResults 来仅检索前 10 名。否则您可能会遇到内存问题。

其次,您两次调用开始事务。只做一次,此外,您处于不需要事务的只读操作中。

最后发布您的问题,您是否得到一些空指针或分离实体异常?如果您要分离实体,请在您正在阅读的属性中使用 Hibernate.initialize。

当然,使用 EQUALS 来比较 String。这可能是你真正的问题。切勿使用“==”运算符比较 Java 中的字符串。

希望这些提示会很有用。

于 2013-05-07T12:08:15.853 回答