【问题标题】:HQL doesn't return ObjectHQL 不返回对象
【发布时间】:2017-01-16 14:43:02
【问题描述】:

我希望我的 HQL 返回对象而不是数组,因为我使用了一些连接表,并且当我编写包含连接表的列名的查询时,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;
}

【问题讨论】:

  • 1.正如 simas_ch 所说:添加有关您的班级住宿的完整路径。 2、你定义了正确的Accomodation构造函数吗?
  • @JoeTaras 我只有一个用于住宿的默认构造函数。
  • 您必须添加一个带有 (Type1, Type2, Type3) 和 3 种查询类型的构造函数
  • 告诉我是否可以,以便我为未来的社区咨询创建答案
  • @JoeTaras 没关系,但是在我按照你告诉我的操作后,我开始从 ajax 获得 404。我编辑问题只是为了向您展示我到目前为止所做的事情。

标签: hibernate hql


【解决方案1】:

关于这个查询:

有两种错误顺序:

第一个(正如 simas_ch 所说):

当您使用新对象(在您的情况下为Accomodation)时,您必须使用所有命名空间路径完全限定您的对象

第二个:

您必须在 pojo 定义中正确定义构造函数。

如果你这样写:

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;
}

【讨论】:

    【解决方案2】:

    Accommodation 必须在类名之前使用完整的包名进行完全限定。

    【讨论】:

    • 你的意思是我相信:ba.reservation.pojo.Accommodation。如果是这样,这也会给出同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    相关资源
    最近更新 更多