首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HQL语句上的IllegalAccessException (使用ManyToOne)

HQL语句上的IllegalAccessException (使用ManyToOne)
EN

Stack Overflow用户
提问于 2015-12-15 23:21:28
回答 2查看 628关注 0票数 0

我正在动态地为一个项目构建HQL语句,但出于某种原因,我有以下问题:

代码语言:javascript
复制
FROM Team m WHERE m.location.city= :location.city

团队和位置都有@Entity注释,并且团队引用该位置:

代码语言:javascript
复制
    @ManyToOne(fetch=FetchType.EAGER, optional=true, targetEntity=Location.class)
    @JoinColumn(name="locationId", referencedColumnName="id")
    private Location location;

地理位置城市:

代码语言:javascript
复制
    @Column(name="city", nullable=true)
    private String city;

创建查询(类似错误):

代码语言:javascript
复制
Query query = entityManagerFactory.createEntityManager().createQuery(statement);

错误:

代码语言:javascript
复制
SEVERE: Servlet.service() for servlet [cpr] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
    at org.hibernate.hql.internal.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:591)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4932)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1260)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4639)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4114)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2096)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:794)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:595)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:190)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:342)
    at com.sun.proxy.$Proxy42.createQuery(Unknown Source)

我也尝试加入:

代码语言:javascript
复制
FROM Team m LEFT JOIN m.location as g WHERE g.city= :location.city
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-16 18:34:17

弄明白了!显然,这个值不能包含.

以前的总部:

代码语言:javascript
复制
FROM Team m WHERE m.location.city= :location.city

固定总部:

代码语言:javascript
复制
FROM Team m WHERE m.location.city= :city

(而且,在修复这个问题时,我发现-也不起作用。)

票数 0
EN

Stack Overflow用户

发布于 2015-12-16 05:33:03

这是一个java.lang.NullPointerException

  • 检查entityManagerFactory是否被正确注入,而不是null。
  • 检查查询参数是否为空。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34301317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档