ClassCastException: org.hibernate.hql.internal.ast.tree.SqlNode не может быть приведен к org.hibernate.hql.internal.ast.tree.PathNode - PullRequest
1 голос
/ 06 апреля 2020

У меня есть служба, которая подключается к maria db для получения данных. У меня есть следующий метод в моем хранилище для получения данных заказа:

@Query("select new Order(o.orderNumber, coalesce(o.orderId, ''), coalesce(o.env, ''), coalesce(o.poNumber, ''), coalesce(o.qty, ''), coalesce(o.sku, ''), "
            + " coalesce(o.customerNumber, ''), coalesce(o.portfolio, ''), coalesce(o.custEmail, '')) "
            + "from Order o where o.portfolio=?1 order by o.orderNumber desc")
    public List<Order> findAllOrder(String portfolio);

Когда я пытаюсь запустить сервис, он выдает следующую ошибку:

ClassCastException: org.hibernate.hql.internal.ast.tree.SqlNode cannot be cast to org.hibernate.hql.internal.ast.tree.PathNode

Любые идеи о том, как почини это? Ценим помощь.

Сущность:

@Entity
@Table(name = "orders")
public class Order {

    private Long orderNumber;
private String orderId;
private String env;
private String poNumber;
private String qty;
private String orderItem;
private String sku;
private String status;
private String portfolio;
private Long customerNumber;
private int requestId;
private int recordId;
private String custEmail;
 public Order(Long orderNumber, String orderId, String env, String poNumber, String qty, String sku,
            Long customerNumber, String portfolio, String custEmail) {
        this.orderNumber = orderNumber;
        this.orderId = orderId;
        this.env = env;
        this.poNumber = poNumber;
        this.qty = qty;
        this.sku = sku;
        this.customerNumber = customerNumber;
        this.portfolio = portfolio;
        this.custEmail = custEmail;
    }
}

1 Ответ

2 голосов
/ 06 апреля 2020

Используйте полную ссылку (с именем пакета) вашего класса в @Query(). Hibernate не нашел ваш класс Order в запросе. Предположим, ваш класс Order находится в вашем пакете com.earth.project, тогда запрос будет

@Query("select new com.earth.project.Order(o.orderNumber, coalesce(o.orderId, ''), coalesce(o.env, ''), coalesce(o.poNumber, ''), coalesce(o.qty, ''), coalesce(o.sku, ''), "
            + " coalesce(o.customerNumber, ''), coalesce(o.portfolio, ''), coalesce(o.custEmail, '')) "
            + "from Order o where o.portfolio=?1 order by o.orderNumber desc")
    public List<Order> findAllOrder(String portfolio);
...