HQL 没有 return 对象
HQL doesn't return Object
我希望我的 HQL 为 return 对象而不是数组,因为我使用了一些连接表,并且当我编写包含连接表的列名的查询时,HQL 给出了数组列表而不是对象。我发现我们应该使用 new
来使它成为对象。
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;
}
住宿必须在 class 名称之前使用完整的套餐名称进行完全限定。
关于此查询:
错误顺序有两种:
第一个(如simas_ch所说):
当您使用新对象(在您的情况下,Accomodation
)时,您必须使用所有命名空间路径完全限定您的对象
第二个:
您必须在 pojo 定义中定义正确的构造函数。
如果你这样写:
new Accommodation(a.name, a.rank, ap.pic)
您必须在 Accomodation
class 中有这样的构造函数:
public Accommodation(String name, int rank, a.name, ArrayList<AccommodationPic> pic) {
this.name = name;
this.rank = rank;
this.pic = pic;
}
我希望我的 HQL 为 return 对象而不是数组,因为我使用了一些连接表,并且当我编写包含连接表的列名的查询时,HQL 给出了数组列表而不是对象。我发现我们应该使用 new
来使它成为对象。
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;
}
住宿必须在 class 名称之前使用完整的套餐名称进行完全限定。
关于此查询:
错误顺序有两种:
第一个(如simas_ch所说):
当您使用新对象(在您的情况下,Accomodation
)时,您必须使用所有命名空间路径完全限定您的对象
第二个:
您必须在 pojo 定义中定义正确的构造函数。
如果你这样写:
new Accommodation(a.name, a.rank, ap.pic)
您必须在 Accomodation
class 中有这样的构造函数:
public Accommodation(String name, int rank, a.name, ArrayList<AccommodationPic> pic) {
this.name = name;
this.rank = rank;
this.pic = pic;
}