我想創建一個HQL新的對象,所以我儘量發出以下查詢:無法選擇容器
String hql = "SELECT new com.pizzaboy.dto.OrderDTO(o.adress, o.orderDate, dt, r, d)"
+ " FROM Order o JOIN o.user u "
+ " JOIN FETCH o.deliveryType dt"
+ " JOIN FETCH o.restaurant r "
+ " JOIN FETCH o.dishes d"
//+ " JOIN FETCH d.dishType disht "
+ " WHERE u.id=:id";
它給了我下面的錯誤,因爲如果「o.dishes」不列出或設置:
org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate appropriate constructor on class [com.pizzaboy.dto.OrderDTO]. Expected arguments are: com.pizzaboy.pojo.Adress, java.util.Date, com.pizzaboy.pojo.DeliveryType, com.pizzaboy.pojo.Restaurant, com.pizzaboy.pojo.Dish [SELECT new com.pizzaboy.dto.OrderDTO(o.adress, o.orderDate, dt, r, elements(d)) FROM com.pizzaboy.pojo.Order o JOIN o.user u JOIN FETCH o.deliveryType dt JOIN FETCH o.restaurant r JOIN FETCH o.dishes d WHERE u.id=:id]
但是,它被設置,的確是:
@Entity
@Table(name = "orders", catalog = "PIZZABOY")
public class Order implements java.io.Serializable {
private Integer id;
private Adress adress;
private DeliveryType deliveryType;
private Payment payment;
private Restaurant restaurant;
private User user;
private Date orderDate;
private Set<Dish> dishes = new HashSet<Dish>(0);
...
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
public Set<Dish> getDishes() {
return this.dishes;
}
public void setDishes(Set<Dish> dishes) {
this.dishes = dishes;
}
爲什麼我得到這個錯誤以及如何解決它?
PS OderDTO構造
public OrderDTO(Adress adress, Date orderDate, DeliveryType deliveryType, Restaurant restaurant,
List<Dish> dishes) {
請,發佈OrderDTO構造函數 –
@JoeTaras問題更新 – 0x6B6F77616C74
只是爲了清楚起見,您能否在兩個對象上使用Set(或List)?目前您正在獲取一個Set並嘗試將它用作List。 –