Hull插入查询中的NullPointer

时间:2017-12-22 11:01:47

标签: java hibernate hql

当我尝试从hql-String中检索查询时,我一直在获取NullPointer。 这是我收到错误的行(HibernateDataReader.java:147)

    Query query = currentSession.createQuery("insert into dwd_view
    (difs, dirs, temp, wdir, wvel, koordinatenid, datum, tid)
    select dwd.difs, dwd.dirs, dwd.temp, dwd.wdir, dwd.wvel, dwd.koordinatenid, dwd.datum, dwd.tid 
from dwd where dwd.koordinatenId = :coordID and dwd.datum between :start and :end")

堆栈跟踪:

java.lang.NullPointerException
    at java.lang.String$CaseInsensitiveComparator.compare(String.java:1192)
    at java.lang.String$CaseInsensitiveComparator.compare(String.java:1186)
    at java.util.TreeMap.getEntryUsingComparator(TreeMap.java:376)
    at java.util.TreeMap.getEntry(TreeMap.java:345)
    at java.util.TreeMap.get(TreeMap.java:278)
    at org.hibernate.dialect.function.SQLFunctionRegistry.findSQLFunction(SQLFunctionRegistry.java:45)
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.findSQLFunction(SessionFactoryHelper.java:369)
    at org.hibernate.hql.internal.ast.tree.IdentNode.getDataType(IdentNode.java:374)
    at org.hibernate.hql.internal.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:652)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.propertyRef(HqlSqlBaseWalker.java:1142)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2291)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2232)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1503)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:585)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.insertStatement(HqlSqlBaseWalker.java:514)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:285)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:266)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153)
    at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:546)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:655)
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:102)
    at myproject.controller.hibernate.HibernateDataReader.execHQL(HibernateDataReader.java:147)
    at myproject.util.hibernate.WeatherCriteriaExecutor.createDWDView(WeatherCriteriaExecutor.java:144)
...

其他解决方案建议包括antlr,但它已经通过maven包含,两个模型都被映射并且基本相同,除了不同的实体名称和tid列,这在dwd_view中不是自动增量。 模型类的示例:

@Entity(name = "dwd") // or "dwd_view"
public class WeatherViewModel  implements HibernateModel {

private static final long serialVersionUID = -3506091597737302833L;

@Id
@Column(name = "tid", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.AUTO) //line missing in dwd_view
private int tid;

@Column(name = "difs")
private Double difs;

@Column(name = "dirs")
private Double dirs;

@Column(name = "temp")
private Double temp;

@Column(name = "wdir")
private Double wdir;

@Column(name = "wvel")
private Double wvel;

@Column(name = "koordinatenid")
private int koordinatenid;

@Column(name = "datum")
@Temporal(TemporalType.TIMESTAMP)
private Calendar datum;

//autogenerated getters and setters

}

数据库是postgres,Hibernate Criteria查询在同一个Session Factory和/或Tables上运行,没有任何错误。直接在数据库上运行查询也没有问题。

提前致谢!

0 个答案:

没有答案