public static List<Province> getAllProvinceFromCache() {

    Cache cache = CacheItemManager.getCache(CacheName.DB_CACHE_PROVINCE);

    Attribute<Integer> id = cache.getSearchAttribute("id");

    Query query = cache.createQuery().includeValues().addCriteria(id.notNull());

    Results results = query.execute();
    List<Result> rs = results.all();

    if (rs == null || rs.size() <= 0) {

      return null;
    }

    int size = rs.size();
    List<Province> list = new ArrayList<Province>();

    for (int i = 0; i < size; ++i) {

      list.add((Province) rs.get(i).getValue());
    }

    results.discard();

    return list;
  }
  public static List<Town> getTownByProvinceFromCache(String provinceCode) {

    Cache cache = CacheItemManager.getCache(CacheName.DB_CACHE_TOWN);

    Attribute<String> provcode = cache.getSearchAttribute("prov_code");

    Query query = cache.createQuery().includeValues().addCriteria(provcode.eq(provinceCode));
    Results results = query.execute();
    List<Result> rs = results.all();

    if (rs == null || rs.size() <= 0) {

      return null;
    }

    int size = rs.size();
    List<Town> list = new ArrayList<Town>();

    for (int i = 0; i < size; ++i) {

      list.add((Town) rs.get(i).getValue());
    }

    results.discard();

    return list;
  }
  public static List<AreaView> getAllAreaFromCache() {

    Cache cache = CacheItemManager.getCache(CacheName.DB_CACHE_AREA);

    Attribute<String> areacode =
        cache.getSearchAttribute(SearchAttributeName.DBCACHE_AREA_AREACODE);

    Query query =
        cache
            .createQuery()
            .includeAttribute(areacode)
            .includeValues()
            .addCriteria(areacode.notNull())
            .addOrderBy(areacode, Direction.ASCENDING);
    Results results = query.execute();

    List<Result> rs = results.all();

    if (rs == null || rs.size() <= 0) {
      return null;
    }

    int size = rs.size();
    List<AreaView> list = new ArrayList<AreaView>();

    for (int i = 0; i < size; ++i) {

      list.add((AreaView) rs.get(i).getValue());
    }
    results.discard();
    return list;
  }
  public static List<Province> getProvinceByAearFromCache(String[] areacodes) {

    Cache cache = CacheItemManager.getCache(CacheName.DB_CACHE_PROVINCE);

    Attribute<String> provarea = cache.getSearchAttribute("prov_area");
    Attribute<String> provcode = cache.getSearchAttribute("prov_code");

    Query query =
        cache
            .createQuery()
            .includeValues()
            .addCriteria(provarea.in(Arrays.asList(areacodes)))
            .addOrderBy(provcode, Direction.ASCENDING);

    Results results = query.execute();
    List<Result> rs = results.all();

    if (rs == null || rs.size() <= 0) {

      return null;
    }

    int size = rs.size();
    List<Province> list = new ArrayList<Province>();

    for (int i = 0; i < size; ++i) {

      list.add((Province) rs.get(i).getValue());
    }

    results.discard();

    return list;
  }