当我尝试从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上运行,没有任何错误。直接在数据库上运行查询也没有问题。
提前致谢!