2017-01-16 153 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'。如果是这样,这也会导致相同的错误。 –