使用ForeignCollection查询或创建对象时有什么开销ormLite?

时间:2014-09-04 14:08:22

标签: performance ormlite foreign-collection

我有一个有玩家的桌子和一个有游戏的桌子。他们之间有玩家----(1..n)[游戏]关系(字段定义可能不完全正确):

// Player
@DatabaseField(generatedId = true)
private int id;
@DatabaseField
public String name;

@ForeignCollectionField(
    eager = true,
    maxEagerLevel = 3)
public ForeignCollection<Game> games;


// Game
@DatabaseField
String title;

@DatabaseField
String playerName;

我想获得并返回所有游戏的列表。什么是开销让ormLite为ForeignCollection做select?或者做这样的事情会更好:

    final List<Game> allGames = daoGames.getAllGroupedByName();
    final List<Player> allPlayers = gameDao.getAll();

    final HashMap<String, List<Game>> games = new HashMap<String, List<Game>>();
    for (Game currentGame : allGames) {
        final String player = currentGame.playerName;
        if (games.get(player) == null) {
            games.put(player, new ArrayList<Game>());
        }
        final List<Game> gamesOfPlayer = games.get(player);
        gamesOfPlayer.add(currentGame);
    }
    for (Player player : allPlayers) {
        player.games = games.get(player.name);
    }

我猜是ormLite会对每个玩家进行查询。与daoGames.getAllGroupedByName()相比,这是一个很大的开销(虽然甚至不需要groupBy)?

1 个答案:

答案 0 :(得分:0)

  

我猜是ormLite会对每个玩家进行查询。与daoGames.getAllGroupedByName()相比,这是一个很大的开销(虽然甚至不需要groupBy)?

这是对的。对于每个Player结果,ORMLite不会非常有效地执行此操作。您执行getAll()并手动匹配的机制很可能会更快。

除非您确实需要ArrayList功能,否则我会使用LinkedList