英文:
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("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);
}
when i use 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);
}
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<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);
Hope that helps. If you run into further problems, do leave a comment.
专注分享java语言的经验与见解,让所有开发者获益!
评论