2016-10-22 7 views
0

私は、HibernateでPostgreSQL配列を扱うことに専念した多くの話題を読んだことがあります。 私はUserTypeインターフェイスを実装していて、私のクエリはネイティブSQLで完全に正常に動作しています。HQLを使用してPostgreSQLアレイで作業することは可能ですか?

private void addCountry(String country, String[] cities) { 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 

    Query insert = session.createNativeQuery("INSERT INTO public.\"countries\"(\n" + 
      "\t\"country\", \"cities\")\n" + 
      "\tVALUES (:Country, :Cities);"); 
    Type arrayType = new CustomType(new StringUserType()); 
    insert.setParameter("Country", country); 
    insert.setParameter("Cities", cities, arrayType); 

    insert.executeUpdate(); 
    /** 
    CountriesEntity countriesEntity = new CountriesEntity(); 
    countriesEntity.setCountry(country); 
    countriesEntity.setCities(cities); 
    session.save(countriesEntity); 
    */ 
    session.getTransaction().commit(); 
} 

private List<String[]> listCities() { 
    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 
    Query getCities = session.createNativeQuery("SELECT \"cities\"\n" + 
      "\tFROM public.\"countries\";") 
      .addScalar("cities", new CustomType(new StringUserType())); 

    List<String[]> cities = getCities.list(); 
    session.getTransaction().commit(); 
    return cities; 
} 

Entityクラス:だから

@Entity 
@Table(name = "countries", schema = "public", catalog = "Travel_Agency") 
public class CountriesEntity { 
private String country; 
private String[] cities; 

@Id 
@Column(name = "country") 
public String getCountry() { 
    return country; 
} 

public void setCountry(String country) { 
    this.country = country; 
} 


@Column(name = "cities") 
@Type(type = "com.testHibernate.core.StringUserType") 
public String[] getCities() { 
    return cities; 
} 

public void setCity(String[] cities) { 
    this.cities = cities; 
} 

}

、それだけでHQLを使用していることを行うことが可能ですか?

答えて

0

createSQLQuery(String queryString)を使用しています。クエリ文字列のSQLQueryインスタンスが作成されています。

それは与えられたHQLクエリ文字列のためのQueryインスタンスを作成しますcreateQuery(String query)方法を、使用することにより可能です。都市名はcityNameある都市の検索例:

Query getCities = session.createQuery("FROM countries WHERE cityName = :city "); 
getCities.setParameter("city", "cityName"); 
return query.list(); 

をここThe Hibernate Query Languageのドキュメントがあります。

関連する問題