private Match exists(Match match) {
   try {
     Map<String, Object> paramMap = new HashMap<String, Object>();
     paramMap.put("matchId", match.getMatchId());
     paramMap.put("bookieId", match.getBookieId());
     paramMap.put("feedTypeId", match.getFeedTypeId());
     return jdbcTemplate.queryForObject(READ_EXISTS_SQL, paramMap, matchRowMapper);
   } catch (EmptyResultDataAccessException e) {
     return null;
   }
 }
  @Override
  public void createMatch(Match match) {
    if (LOGGER.isDebugEnabled()) {
      LOGGER.debug(String.format("createMatch(match=%s)", match.toString()));
    }
    Match dbMatch = exists(match);
    if (dbMatch == null) {
      if (LOGGER.isInfoEnabled()) {
        LOGGER.info("Creating Match key - " + match.toString());
      }
      try {
        /** Create match. */
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("matchId", match.getMatchId());
        paramMap.put("leagueName", match.getLeagueName());
        paramMap.put("homeTeamName", match.getHomeTeamName());
        paramMap.put("awayTeamName", match.getAwayTeamName());
        paramMap.put("matchTime", match.getMatchTime());
        paramMap.put("runningInd", match.getRunningIndicator());
        paramMap.put("homeScore", match.getHomeScore());
        paramMap.put("awayScore", match.getAwayScore());
        paramMap.put("timeGameLive", match.getTimeGameLive());
        paramMap.put("leagueId", match.getLeagueId());
        paramMap.put("homeTeamId", match.getHomeTeamId());
        paramMap.put("awayTeamId", match.getAwayTeamId());
        paramMap.put("feedTypeId", match.getFeedTypeId());
        paramMap.put("timeFirstGoal", match.getTimeFirstGoal());
        paramMap.put("kickOffHomePrice", match.getKoHomePrice());
        paramMap.put("kickOffAwayPrice", match.getKoAwayPrice());
        paramMap.put("kickOffOuHfPrice", match.getKoOuHfPrice());
        paramMap.put("kickOffDrawPrice", match.getKoDrawPrice());
        paramMap.put("matchDate", new java.sql.Date(match.getMatchDate().getMillis()));
        paramMap.put("bookieId", match.getBookieId());
        paramMap.put("ouHfHandicap", match.getOuHandicapValue());

        jdbcTemplate.update(INSERT_SQL, paramMap);

        /** Create match minutes for each bookie with odds on the match. */
        matchTimeDao.createMatchTime(
            match.getMatchId(), match.getFeedTypeId(), match.getBookieId());
      } catch (Exception e) {
        LOGGER.info("Exception=" + e.getMessage());
      }
    } else {
      /** Has match started? */
      if (dbMatch.getRunningIndicator().intValue() == 0) {
        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("matchId", match.getMatchId());
        paramMap.put("feedTypeId", match.getFeedTypeId());
        paramMap.put("bookieId", match.getBookieId());

        if (hasPriceChanged(match.getKoHomePrice(), dbMatch.getKoHomePrice())) {
          if (LOGGER.isInfoEnabled()) {
            LOGGER.info(
                "Update Home Price "
                    + dbMatch.getKoHomePrice()
                    + " for Match - "
                    + match.toString());
          }
          paramMap.put("homePrice", match.getKoHomePrice());
          jdbcTemplate.update(UPDATE_KO_HOME_PRICE_SQL, paramMap);
        }
        if (hasPriceChanged(match.getKoAwayPrice(), dbMatch.getKoAwayPrice())) {
          if (LOGGER.isInfoEnabled()) {
            LOGGER.info(
                "Update Away Price "
                    + dbMatch.getKoAwayPrice()
                    + " for Match - "
                    + match.toString());
          }
          paramMap.put("awayPrice", match.getKoAwayPrice());
          jdbcTemplate.update(UPDATE_KO_AWAY_PRICE_SQL, paramMap);
        }
        if (hasPriceChanged(match.getKoDrawPrice(), dbMatch.getKoDrawPrice())) {
          if (LOGGER.isInfoEnabled()) {
            LOGGER.info(
                "Update Draw Price "
                    + dbMatch.getKoDrawPrice()
                    + " for Match - "
                    + match.toString());
          }
          paramMap.put("drawPrice", match.getKoDrawPrice());
          jdbcTemplate.update(UPDATE_KO_DRAW_PRICE_SQL, paramMap);
        }
        if (hasPriceChanged(match.getKoOuHfPrice(), dbMatch.getKoOuHfPrice())) {
          if (LOGGER.isInfoEnabled()) {
            LOGGER.info(
                "Update OU HT 0.5 Price "
                    + dbMatch.getKoOuHfPrice()
                    + " for Match - "
                    + match.toString());
          }
          paramMap.put("ouHfPrice", match.getKoOuHfPrice());
          jdbcTemplate.update(UPDATE_KO_UOHT_PRICE_SQL, paramMap);
        }
      }
    }
  }