【问题标题】:How to fix org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: u如何修复 org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:u
【发布时间】:2019-05-31 19:04:35
【问题描述】:

我正在尝试获取 User 对象,除了用户名和密码之外,该对象还有一个布尔变量,用于说明它是否已被删除。布尔变量称为删除。在我的数据库中,所有用户实体都是假的。

我尝试了 ClassicalSyntax,但它给出了另一个错误。

public User loginUser(String username, String password) {
        TypedQuery<User> query = em.createQuery("Select u from User u " + "where u.username LIKE "
                + "?1 AND u.password LIKE " + "?2 AND u.delete =:delete", User.class);
        query.setParameter(1, username);
        query.setParameter(2, password);
        query.setParameter("delete", false);
        User foundUser = query.getSingleResult();
        return foundUser;

    }

它适用于其他两个 u 定义 u.username 和 u.password ,但是当我添加 u.delete 时,它​​给了我这个错误。我希望它返回对象。

SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path [/webproject] threw exception [java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: u near line 1, column 101 [Select u from com.ikubinfo.project.model.User u where u.username LIKE ?1 AND u.password LIKE ?2 AND u.delete =:delete]] with root cause
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: u near line 1, column 101 [Select u from com.ikubinfo.project.model.User u where u.username LIKE ?1 AND u.password LIKE ?2 AND u.delete =:delete]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:304)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)
    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:167)
    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:342)
    at com.ikubinfo.project.repository.UserRepository.loginUser(UserRepository.java:34)
    at com.ikubinfo.project.controller.UserResource.deleteUser(UserResource.java:71)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:292)

【问题讨论】:

  • 我认为 u.delete 会导致任何问题,但不知道为什么。

标签: java postgresql hibernate jpa


【解决方案1】:

delete不能作为属性名,请尝试重命名?

【讨论】:

    【解决方案2】:

    另一种选择是在实体类中对其进行转义: @Column(name = "\"delete\"")

    【讨论】:

      猜你喜欢
      • 2021-08-20
      • 2016-06-08
      • 2020-03-13
      • 2020-09-05
      • 1970-01-01
      • 2021-05-29
      • 2015-07-12
      • 1970-01-01
      • 2016-02-21
      相关资源
      最近更新 更多