2017-01-16 5 views
2

私はいくつかの結合テーブルを使用し、結合されたテーブルの列名を含むクエリを書くとき、HQLは配列の代わりに配列リストを返すようにします。私はそれをオブジェクトにするためにnewを使うべきであることを発見しました。HQLはオブジェクトを返しません

SELECT new Accommodation(a.name, a.rank, ap.pic) FROM Accommodation AS a INNER JOIN a.accommodationPics AS ap WHERE ap.isPromoPic = 1 AND a.cbState.stateName = :stateName 

これまでに試したところ、エラー:'Accommodation' cannot be resolved to a type.がありました。何か間違っていますか?

更新

新しいクエリ:SELECT new ba.reservation.pojo.Accommodation(a.name, a.rank, ap) FROM Accommodation AS a INNER JOIN a.accommodationPics AS ap WHERE ap.isPromoPic = 1 AND a.cbState.stateName = :stateName

@Column(name = "name", nullable = false, length = 200) 
private String name; 

@Column(name = "rank") 
private int rank; 

@OneToMany(mappedBy = "accommodationBean", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE) 
@JsonManagedReference 
private List<AccommodationPic> accommodationPics; 

public Accommodation(String _name, int _rank, ArrayList<AccommodationPic> _pic) { 
    this.rank = _rank; 
    this.name = _name; 
    this.accommodationPics = _pic; 
} 
+0

1:あなたのクラスの宿泊施設に関する完全なパスを追加します

new Accommodation(a.name, a.rank, ap.pic) 

をあなたはAccomodationクラスでこのようなコンストラクタを持っている必要があります。 2.宿泊施設について正しいコンストラクタを定義しましたか? –

+0

@JoeTaras私は、宿泊施設用のデフォルトのコンストラクタを持っています。 –

+0

(タイプ1、タイプ2、タイプ3)のコストラクターを3種類のクエリーで追加する必要があります。 –

答えて

0

最初(simas_chが言ったように)::

エラーの2つの順序があります(あなたのケースでは、Accomodation)新しいオブジェクトを使用する場合

は、あなたがしなければなりませんあなたのPOJで適切にコンストラクタを定義しなければなりません

:完全

二すべての名前空間のパスを使用してオブジェクトを修飾定義。

あなたはこの記述する場合:simas_chが言うように

public Accommodation(String name, int rank, a.name, ArrayList<AccommodationPic> pic) { 
    this.name = name; 
    this.rank = rank; 
    this.pic = pic; 
} 
+0

ご協力いただきありがとうございます –

0

宿泊は、クラス名の前に完全なパッケージ名で完全修飾する必要があります。このクエリについて

+0

これは私が信じていることを意味します: 'ba.reservation.pojo.Accommodation'。そうであれば、これも同じエラーになります。 –

関連する問題