2017-01-16 154 views
2

我希望我的HQL返回Object而不是數組,因爲我使用了一些連接表,當我編寫包含連接表的列名的查詢時,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. simas_ch說:加入你的類寄宿完整路徑。 2.您是否定義了有關住宿的正確構造方法? –

+0

@JoeTaras我只有一個默認的住宿構造函數。 –

+0

您必須添加一個構造函數(Type1,Type2,Type3)和3種類型的查詢 –

回答

0

關於這個查詢:

有兩種順序錯誤:

第(如simas_ch說):

當你使用一個新的對象(在你的情況,Accomodation),您必須完全合格的對象與所有的命名空間路徑

第二:

您必須在POJ定義一個適當的構造o定義。

如果你這樣寫:

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

您必須在Accomodation類這樣的構造:

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'。如果是這樣,這也會導致相同的錯誤。 –