gt: 			List<Country> results = (List<Country>) qry.list();
context: /*******************************************************************************
   *   Gisgraphy Project 
   * 
   *   This library is free software; you can redistribute it and/or
   *   modify it under the terms of the GNU Lesser General Public
   *   License as published by the Free Software Foundation; either
   *   version 2.1 of the License, or (at your option) any later version.
   * 
   *   This library is distributed in the hope that it will be useful,
   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   *   Lesser General Public License for more details.
   * 
   *   You should have received a copy of the GNU Lesser General Public
   *   License along with this library; if not, write to the Free Software
   *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
   * 
   *  Copyright 2008  Gisgraphy project 
   *  David Masclet <davidmasclet@gisgraphy.com>
   *  
   *  
   *******************************************************************************/
  /**
   *
   */
  package com.gisgraphy.domain.repository;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import javax.persistence.PersistenceException;
  
  import org.hibernate.Query;
  import org.hibernate.Session;
  import org.springframework.orm.hibernate3.HibernateCallback;
  import org.springframework.stereotype.Repository;
  
  import com.gisgraphy.domain.geoloc.entity.Country;
  import com.gisgraphy.domain.repository.exception.DuplicateNameException;
  
  /**
   * A data access object for {@link Country}
   * 
   * @author <a href="mailto:david.masclet@gisgraphy.com">David Masclet</a>
   */
  @Repository
  public class CountryDao extends GenericGisDao<Country> implements ICountryDao {
  
      /**
       * Default Constructor
       */
      public CountryDao() {
  	super(Country.class);
      }
  
      /**
       * @param country
       *                the country to save
       * @return The saved instance
       * @throws DuplicateNameException
       *                 If a country with the same name already exists in the
       *                 datastore
       */
      @Override
      public Country save(Country country) {
  	if (country != null && country.getId() == null
  		&& getByName(country.getName()) != null) {
  	    throw new DuplicateNameException(
  		    "A country with the specified name already exists : "
  			    + country.getName());
  	}
  	return super.save(country);
      }
  
      /*
       * (non-Javadoc)
       * 
       * @see com.gisgraphy.domain.repository.ICountryDao#getByIso3166Alpha2Code(java.lang.String)
       */
      public Country getByIso3166Alpha2Code(final String iso3166Alpha2Code) {
  	if (iso3166Alpha2Code == null) {
  	    return null;
  	}
  	if (iso3166Alpha2Code.length() != 2) {
  	    logger
  		    .info("can not retrieve country with iso639Alpha2LanguageCode="
  			    + iso3166Alpha2Code
  			    + " : iso639Alpha2LanguageCode must have a length of 2 ");
  	    return null;
  	}
  	return (Country) this.getHibernateTemplate().execute(
  		new HibernateCallback() {
  
  		    public Object doInHibernate(Session session)
  			    throws PersistenceException {
  			String queryString = "from "
  				+ Country.class.getSimpleName()
  				+ " as c where c.iso3166Alpha2Code= ?";
  
  			Query qry = session.createQuery(queryString);
  			qry.setCacheable(true);
  
  			qry.setParameter(0, iso3166Alpha2Code.toUpperCase());
  			Country result = (Country) qry.uniqueResult();
  
  			return result;
  		    }
  		});
      }
  
      /*
       * (non-Javadoc)
       * 
       * @see com.gisgraphy.domain.repository.ICountryDao#getByIso3166Alpha3Code(java.lang.String)
       */
      public Country getByIso3166Alpha3Code(final String iso3166Alpha3Code) {
  	if (iso3166Alpha3Code == null) {
  	    return null;
  	}
  	if (iso3166Alpha3Code.length() != 3) {
  	    logger.info("can not retrieve country with iso3166Alpha3Code="
  		    + iso3166Alpha3Code
  		    + " : iso3166Alpha3Code must have a length of 3 ");
  	    return null;
  	}
  	return (Country) this.getHibernateTemplate().execute(
  		new HibernateCallback() {
  
  		    public Object doInHibernate(Session session)
  			    throws PersistenceException {
  			String queryString = "from "
  				+ Country.class.getSimpleName()
  				+ " as c where c.iso3166Alpha3Code= ?";
  
  			Query qry = session.createQuery(queryString);
  			qry.setCacheable(true);
  
  			qry.setParameter(0, iso3166Alpha3Code.toUpperCase());
  			Country result = (Country) qry.uniqueResult();
  
  			return result;
  		    }
  		});
      }
  
      /*
       * (non-Javadoc)
       * 
       * @see com.gisgraphy.domain.repository.ICountryDao#getByIso3166Code(java.lang.String)
       */
      public Country getByIso3166Code(String iso3166Code) {
  	if (iso3166Code == null) {
  	    return null;
  	}
  	if (iso3166Code.length() == 2) {
  	    return getByIso3166Alpha2Code(iso3166Code);
  	} else if (iso3166Code.length() == 3) {
  	    return getByIso3166Alpha3Code(iso3166Code);
  	} else {
  	    logger.info("can not retrieve country with iso3166Code="
  		    + iso3166Code
  		    + " : iso3166Code must have a length of 2 or 3");
  	    return null;
  	}
      }
  
      // TODO v2 getneighboors and set neighboors en post import des polygon de
      // country
      /*
       * (non-Javadoc)
       * 
       * @see com.gisgraphy.domain.repository.ICountryDao#getByName(java.lang.String)
       */
      public Country getByName(final String name) {
  	if (name == null) {
  	    return null;
  	}
  	return (Country) this.getHibernateTemplate().execute(
  		new HibernateCallback() {
  
  		    public Object doInHibernate(Session session)
  			    throws PersistenceException {
  			String queryString = "from "
  				+ Country.class.getSimpleName()
  				+ " as c where c.name= ?";
  
  			Query qry = session.createQuery(queryString);
  			qry.setCacheable(true);
  
  			qry.setParameter(0, name);
  			Country result = (Country) qry.uniqueResult();
  
  			return result;
  		    }
  		});
      }
  
      /*
       * (non-Javadoc)
       * 
       * @see com.gisgraphy.domain.repository.GenericDao#deleteAll()
       */
      @Override
      public int deleteAll() {
  	List<Country> all = getAll();
  	int deleted = all.size();
  	if (deleted != 0) {
  	    super.deleteAll(all);
  	    super.flushAndClear();
  	}
  	flushAndClear();
  	return deleted;
      }
  
      /*
       * (non-Javadoc)
       * 
       * @see com.gisgraphy.domain.repository.ICountryDao#getAllSortedByName()
       */
      @SuppressWarnings("unchecked")
      public List<Country> getAllSortedByName() {
  	return (List<Country>) this.getHibernateTemplate().execute(
  		new HibernateCallback() {
  
  		    public Object doInHibernate(Session session)
  			    throws PersistenceException {
  			String queryString = "from "
  				+ persistentClass.getSimpleName()
  				+ " order by name";
  
  			Query qry = session.createQuery(queryString);
  			qry.setCacheable(true);
  