Example #1
0
  @Override
  public void saveOrUpdate(Collection<User> users) {
    if (users == null || users.size() == 0) {
      return;
    }
    HashMap<Long, User> uid2user = new HashMap<Long, User>();

    Collection<Long> uids = new ArrayList<Long>();
    for (User user : users) {
      uid2user.put(user.getUid(), user);
      uids.add(user.getUid());
    }
    List<User> existsUsers = createQuery().filter("uid in", uids).asList();
    HashSet<Long> existsUids = new HashSet<Long>();
    List<User> newUsers = new ArrayList<User>();
    for (User existsUser : existsUsers) {
      existsUids.add(existsUser.getUid());
      User updateUser = uid2user.get(existsUser.getUid());
      existsUser.setScreenName(updateUser.getScreenName());
      existsUser.setName(updateUser.getName());
      existsUser.setProfileImageUrl(updateUser.getProfileImageUrl());
      existsUser.setFollowersSize(updateUser.getFollowersSize());
      existsUser.setTweetsSize(updateUser.getTweetsSize());
      existsUser.setDetail(updateUser.getDetail());
      newUsers.add(existsUser);
      updateUser.setId(existsUser.getId());
    }

    for (User user : users) {
      if (!existsUids.contains(user.getUid())) {
        newUsers.add(user);
      }
    }
    ds.save(newUsers);
  }