public static void saveMatchComplete(Match match) {
    Session session = HibernateUtils.getSessionFactory().openSession();
    session.beginTransaction();
    session.saveOrUpdate(match);
    for (Team team : match.getTeams()) {
      team.setMatch(match);
      session.saveOrUpdate(team);

      for (Matchbannedchampion banned : team.getBans()) {
        banned.setTeam(team);
        session.saveOrUpdate(banned);
      }
    }
    for (Matchparticipant participant : match.getParticipants()) {
      participant.setMatch(match);
      session.saveOrUpdate(participant);

      Participantstats stats = participant.getStats().iterator().next();
      stats.setMatchparticipant(participant);
      session.saveOrUpdate(stats);
    }

    for (Participantidentity identity : match.getParticipantIdentities()) {
      identity.setMatch(match);
      Player player = identity.getPlayer();
      player.setParticipantidentity(identity);
      session.saveOrUpdate(player);
    }
    session.getTransaction().commit();
    session.close();
  }
 @SuppressWarnings("unchecked")
 public static List<Match> getAllMatches() {
   Session session = HibernateUtils.getSessionFactory().openSession();
   List<Match> summList = session.createCriteria(Match.class).list();
   session.close();
   return summList;
 }
 public static List<Match> getAllMatchesForSummoner(long id) {
   Session session = HibernateUtils.getSessionFactory().openSession();
   SQLQuery query =
       session.createSQLQuery(
           " SELECT * FROM `match` m, participantstats ps,  participantidentity pi, player p, matchparticipant mp WHERE m.matchId = mp.matchId "
               + "  AND m.matchId = pi.matchId AND pi.dbId = p.dbId AND mp.dbId = ps.dbId AND p.summonerId = :id AND mp.participantId = pi.participantId");
   query.setParameter("id", id);
   query.addEntity(Match.class);
   session.close();
   return query.list();
 }
 @SuppressWarnings("unchecked")
 public static List<Match> getAllMatchesFiltered(long id, String season) {
   Session session = HibernateUtils.getSessionFactory().openSession();
   Query query =
       session.createQuery(
           " SELECT distinct m FROM Match as m left join m.participants mp left join m.participantIdentities pi left join pi.player p left join mp.stats ps  WHERE "
               + " m.season = :season and p.summonerId = :id AND m.matchId = mp.match.matchId and m.matchId = pi.match.matchId and pi.dbId = p.participantidentity.dbId and mp.dbId = ps.matchparticipant.dbId");
   query.setParameter("season", season);
   query.setParameter("id", id);
   List<Match> matchList = query.list();
   session.close();
   return matchList;
 }
 public static Match findById(long id) {
   Session session = HibernateUtils.getSessionFactory().openSession();
   log.debug("getting Match instance with id: " + id);
   try {
     Match instance = (Match) session.get("Match", id);
     session.close();
     return instance;
   } catch (RuntimeException re) {
     session.close();
     log.error("get failed", re);
     throw re;
   }
 }
 public static void delete(Match persistentInstance) {
   log.debug("deleting Match instance");
   Session session = HibernateUtils.getSessionFactory().openSession();
   try {
     session.delete(persistentInstance);
     log.debug("delete successful");
     session.close();
   } catch (RuntimeException re) {
     session.close();
     log.error("delete failed", re);
     throw re;
   }
 }
 public static String getLastSeasonRank(long id, String season) {
   Session session = HibernateUtils.getSessionFactory().openSession();
   SQLQuery query =
       session.createSQLQuery(
           " SELECT mp.highestAchievedSeasonTier as tier FROM `match` m,  participantidentity pi,  player p, "
               + " matchparticipant mp WHERE m.season = :season AND m.matchId = mp.matchId AND m.matchId = pi.matchId AND "
               + " pi.dbId = p.dbId AND mp.participantId = pi.participantId AND p.summonerId = :id LIMIT 1");
   query.setParameter("season", season);
   query.setParameter("id", id);
   query.addScalar("tier", StringType.INSTANCE);
   String rank = (String) query.uniqueResult();
   session.close();
   return rank;
 }