ошибка при использовании CriteriaBuilder для условия где - PullRequest
0 голосов
/ 23 апреля 2020

доброе утро всем,

я получил ошибку, когда я хочу получить данные для условия isNull с использованием построителя критериев

я получил ошибку вроде этой org.hibernate.query.criteria.internal.predicate.ComparisonPredicate cannot be cast to javax.persistence.criteria.CriteriaBuilder

здесь мой код

 RepositoryFactory.emf=Persistence.createEntityManagerFactory("onezero");
    String Symbol = "EURUSD";
    TradingHistory tradingHistorys = RepositoryFactory.getTradingHistoryRepo().findPriceNull(Symbol);
    String symbols = tradingHistorys.getSymbol();
    Date time = tradingHistorys.getCreated_at();
    System.out.println(symbols+"|"+time);

и здесь, когда я ищу нулевое условие

public TradingHistory findPriceNull(final String symbol) throws SQLException{
          WhereClause<TradingHistory> conditions = new WhereClause<TradingHistory>() {

            public void defineWhere(CriteriaBuilder criteriaBuilder, CriteriaQuery<TradingHistory> criteriaQuery,
                    Root<TradingHistory> root) {
                // TODO Auto-generated method stub
                criteriaQuery.select(root).where(((CriteriaBuilder) criteriaBuilder.equal(root.get("Price"), isNull()))
                        .and(criteriaBuilder.equal(root.get("Symbol"), symbol)));
            }
        };
        return singleResult(conditions,null,0,1,0);

    }

и здесь мой класс whereclause

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

public interface WhereClause<T> {
     public void defineWhere(CriteriaBuilder criteriaBuilder,CriteriaQuery<T> criteriaQuery,Root<T> root);
}

я также должен попытаться использовать

public TradingHistory findBysymbol(String symbol) throws SQLException {
        // TODO Auto-generated method stub
         WhereClause<TradingHistory> conditions = new WhereClause<TradingHistory>() {

                public void defineWhere(CriteriaBuilder criteriaBuilder, CriteriaQuery<TradingHistory> criteriaQuery,
                        Root<TradingHistory> root) {
                    // TODO Auto-generated method stub
                    criteriaQuery.select(root).where(criteriaBuilder.equal(root.get("Price").isNull(), root));
                }
            };
        return singleResult(conditions,null,0,1,0);

    }

но я получил ошибку типа

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: is near line 1, column 116 [select generatedAlias0 from com.dxtr.hibernate.model.TradingHistory as generatedAlias0 where generatedAlias0.Price is null=generatedAlias0]

Я хочу знать, что является причиной этой ошибки?

...