2016-08-25 7 views
1

プロジェクトでJPAとハイバネートの両方を使用しています。jpaとhibernateを使用してネイティブクエリをPOJOクラスにマップする方法

私は多くのテーブルに対して結合操作を行ったクエリを作成しました。だから私はネイティブなものを作りました。私が得た結果はオブジェクト[]のリストにありますが、の結果は自動的にjava POJOクラスに変換されます。 下記のクエリ構文とPOJO javaクラスの両方を確認できます。

JPAクエリ

@Query(value = "SELECT obsp.Identifier, obs.phenomenontimestart, nv.value " + 
     "From Series s " + 
     "INNER JOIN Featureofinterest fi on s.featureofinterestid = fi.featureofinterestid " + 
     "INNER JOIN ObservableProperty obsp on s.observablepropertyid = obsp.ObservablePropertyId " + 
     "INNER JOIN Observation obs on s.seriesid = obs.seriesid " + 
     "INNER JOIN NumericValue nv on nv.observationid = obs.observationid " + 
     "where fi.identifier = ?1 and obs.phenomenontimestart >= ?2 AND obs.phenomenontimestart <= ?3 " + 
     "order by obs.phenomenontimestart", 
     nativeQuery = true) 
List<CurrentMeasure> findCurrentMeasure(String ident, Timestamp t1, Timestamp t2); 

POJOクラス

public class CurrentMeasure { 

private String identifier; 
private Timestamp dateTime; 
private BigDecimal bigDecimal; 

public CurrentMeasure() { 
} 

public CurrentMeasure(String identifier, Timestamp dateTime, BigDecimal bigDecimal) { 
    this.identifier = identifier; 
    this.dateTime = dateTime; 
    this.bigDecimal = bigDecimal; 
} 

public String getIdentifier() { 
    return identifier; 
} 

public void setIdentifier(String identifier) { 
    this.identifier = identifier; 
} 

public Timestamp getDateTime() { 
    return dateTime; 
} 

public void setDateTime(Timestamp dateTime) { 
    this.dateTime = dateTime; 
} 

public BigDecimal getBigDecimal() { 
    return bigDecimal; 
} 

public void setBigDecimal(BigDecimal bigDecimal) { 
    this.bigDecimal = bigDecimal; 
} 

} JPAで

+0

なぜJPQLが必要な処理を行うときにSQLクエリを使用するのですか? (これらのテーブルのエンティティがあると仮定します)。 –

答えて

1

あなたが直接あなたのHQLクエリ内でクラスCurrentMeasureのコンストラクタを呼び出すことができます。

例: NEW構文は章11.5でJboss documentationに説明されて SELECT NEW <package>.CurrentMeasure(obsp.Identifier, obs.phenomenontimestart, nv.value) FROM ...

もう1つの解決策は、コンストラクタを使用せずに同じ結果を達成するためにHQL Transformersを使用することです。

+0

それは私のために働く!どうもありがとう – dsmyrnaios

関連する問題