Java的Criteria Builder用于Null值

huangapple 未分类评论54阅读模式
英文:

Java Criteria builder for Null value

问题

这是我使用 Java Criteria Builder 的代码:

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) {
            criteriaQuery.select(root).where(
                criteriaBuilder.and(
                    criteriaBuilder.equal(root.get("Symbol"), Symbol),
                    criteriaBuilder.isNull(root.get("Price"))
                )
            );
        }
    };
    return singleResult(conditions, null, 0, 1, 0);
}

当我使用 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);
}

我得到了以下错误:

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)]

我的问题是如何在价格为 null 时进行搜索?因为当我使用该代码时,我得到了 Java 空指针异常的错误。所以我们有问题需要修复。请帮我解决这个问题。

英文:

I have using java criteria builder, this is my code

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

public TradingHistory findPriceEmpty( final String Symbol) throws SQLException{
		  WhereClause&lt;TradingHistory&gt; conditions = new WhereClause&lt;TradingHistory&gt;() {
			  
			public void defineWhere(CriteriaBuilder criteriaBuilder, CriteriaQuery&lt;TradingHistory&gt; criteriaQuery,
					Root&lt;TradingHistory&gt; root) {
				// TODO Auto-generated method stub
				
				criteriaQuery.select(root).where((criteriaBuilder.and(criteriaBuilder.equal(root.get(&quot;Symbol&quot;), Symbol)
						,(criteriaBuilder.equal(root.get(&quot;Price&quot;), null)))));
			}
		};
		return singleResult(conditions,null,0,1,0);
		
	}

when i use is null()

    public TradingHistory findPriceEmpty( final String Symbol) throws SQLException{
    		  WhereClause&lt;TradingHistory&gt; conditions = new WhereClause&lt;TradingHistory&gt;() {
    			  
    			public void defineWhere(CriteriaBuilder criteriaBuilder, CriteriaQuery&lt;TradingHistory&gt; criteriaQuery,
    					Root&lt;TradingHistory&gt; root) {
    				// TODO Auto-generated method stub
    				
    				criteriaQuery.select(root).where((criteriaBuilder.and(criteriaBuilder.equal(root.get(&quot;Symbol&quot;), Symbol)
    						,(criteriaBuilder.equal(root.get(&quot;Price&quot;).isNull(), root)))));
    			}
    		};
    		return singleResult(conditions,null,0,1,0);
    		
    	}

i got error like

    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 )]

my question how to search when price = null ? because when i use that code i got error Java null pointer exception. so there is problem for us...

please help me for fix it

答案1

得分: 0

看起来你可以使用 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);
}

希望这有所帮助。如果你遇到更多问题,请留下评论。

英文:

Looks like you would use isNull() as in the following sample:

public TradingHistory findPriceEmpty( final String Symbol) throws SQLException{
          WhereClause&lt;TradingHistory&gt; conditions = new WhereClause&lt;TradingHistory&gt;() {

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

Hope that helps. If you run into further problems, do leave a comment.

huangapple
  • 本文由 发表于 2020年5月5日 11:39:33
  • 转载请务必保留本文链接:https://java.coder-hub.com/61605358.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定