Null 值的 Java Criteria 构建器

标签 java mysql hibernate

我使用了java标准生成器,这是我的代码

     RepositoryFactory.emf=Persistence.createEntityManagerFactory("onezero");
            String Symbol = "EURUSD";
            TradingHistory tradingHistorys = RepositoryFactory.getTradingHistoryRepo().findPriceEmpty(Symbol);
            String symbols = tradingHistorys.getSymbol();
            Date created = tradingHistorys.getCreated_at();

public TradingHistory findPriceEmpty( 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.and(criteriaBuilder.equal(root.get("Symbol"), Symbol)
                        ,(criteriaBuilder.equal(root.get("Price"), null)))));
            }
        };
        return singleResult(conditions,null,0,1,0);

    }

当我使用is null()时

    public TradingHistory findPriceEmpty( 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.and(criteriaBuilder.equal(root.get("Symbol"), Symbol)
                            ,(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 157 [select generatedAlias0 from com.dxtr.hibernate.model.TradingHistory as generatedAlias0 where ( generatedAlias0.Symbol=:param0 ) and ( generatedAlias0.Price is null=generatedAlias0 )]

我的问题当price = null时如何搜索?因为当我使用该代码时,我收到错误 Java 空指针异常。所以我们有问题......

请帮我解决这个问题

最佳答案

看起来您会使用isNull()如以下示例所示:

public TradingHistory findPriceEmpty( final String Symbol) throws SQLException{
          WhereClause<TradingHistory> conditions = new WhereClause<TradingHistory>() {

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

希望有帮助。如果您遇到更多问题,请发表评论。

关于Null 值的 Java Criteria 构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61605358/

相关文章:

java - 从 jsp 读取 xml

java - addTab() 在回调中不添加任何 TabLayout.Tab

mysql - 返回可变行数时,如何在 MySQL 中编写 if else-if else 查询

mysql - 如何从存储在 MySql 中的 URL 字符串中提取查询字符串值并将其保存在新字段中?

java - Hibernate 连接表限制

java - 如何设置 Dialog 控件的图标 Java FX/Java 8

java - 给定列表中的百万数字。如何以最小的时间复杂度将每个元素乘以一个常数

sql - 如何通过提供路径来查询邻接关系(在 SQL 中)以获取叶子?

java - 线程安全输入验证

java - 组织.hibernate.HibernateException : save is not valid without active transaction