当前位置: 首页 > 知识库问答 >
问题:

JPA查询不起作用

范甫
2023-03-14

你能帮我解决这个问题吗?我想使用此方法在我的数据库中查找特定的缺口(它是由Apache Derby制作的)。我使用了EntityManager并从NetBeans中的数据库中映射持久性-实体类。

public static boolean findByNick(String nick) {

    List<eng.db.User> ret;
    EntityManager em = getEntityManager();

    Query q = em.createQuery("SELECT * FROM User u WHERE u.nick =:nick");
    q.setParameter("nick", nick);
    ret = q.getResultList();
    em.close();

    boolean hodnota = false;

    if (ret.isEmpty()) {
        hodnota = true;
    }

    return hodnota;
}

我得到这个错误:

Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:< br >异常描述:解析[SELECT * FROM User u WHERE u . nick =:nick]时出现语法错误。< br> [21,21]select语句必须有FROM子句。< br> [7,7]算术表达式中缺少左表达式。[9,20]正确的表达式不是算术表达式。< br> [41,42]查询包含格式错误的结尾。

请问问题在哪里?

共有2个答案

易成双
2023-03-14

它应该是

更新

根据您的评论,现在查询应该是:

SELECT u.userID, u.enterKey, u.nick 
FROM User u
WHERE u.nick = ?

或具有命名参数

SELECT u.userId, u.enterKey, u.nick 
FROM User u
WHERE u.nick = :nick

其中 usereID、enterKey 和 nick 是实体类型 User 的字段(属性)。

您的用户类应该看起来像这样

@Entity
public class User {

      @Id
      private long userId;

     @column(name="EnterKey"
      private String enterKey;

      @column(name="nick")
      private String nick;

      // setter getter
}

考虑到这一点,hql和您使用了对象模型的类和属性名称,您将其定义为查询的参数。

在查询中,Hibernate或任何其他 JPA 实现使用您定义的映射创建用户类型的对象列表。表达式 * 不能与此类型的对象名称相关联。在 sql 中,与 * 等效的是与对象相关的查询语言,只是在您的情况 “u” 中 from 子句的别名,因为 from 子句如下所示:

From User u

如果你只想选择你的实体的单独的字段,你必须声明

 Select alias.property
 from Entity alias

或在您的特殊情况下

 Select u.nick
 From User u

在这种情况下,将创建User类型的实例并设置字段nick。

呼延弘方
2023-03-14

如果尼克是实体的主键(@Id),则使用:

return em.find(eng.db.User, nick) != null;

或者如果不是:

Query q = em.createQuery("SELECT TRUE FROM User u WHERE u.nick =:nick");
q.setParameter("nick", nick);
return !q.getResultList().isEmpty();

通过返回一个简单的布尔值,您可以最小化DB响应。

 类似资料:
  • 我使用Spring Boot 1.4.1和spring-boot-starter-data-jpa 当查询我的自定义方法时,比如'find byname(String name)',它不是缓存。

  • 问题内容: 我正在尝试以下JPQL,但它失败了: 我得到以下异常: 我有Spring 3.0.1.RELEASE,Hibernate 3.5.1-Final和Maven来粘合依赖项。 用户类别: spring配置: Persistence.xml pom.xml Maven依赖项。 我正在运行单元测试以检查配置,并且我能够运行其他JPQL查询,但我无法运行的唯一条件是IS EMPTY,MEMBER

  • 问题内容: 我有一个非常简单的查询,像这样: 我的默认设置是或某些用户ID,但是由于某种原因,该查询总是返回0行,我也尝试过,但还是没有运气,这可能是什么错误? EDTI 因此,在运行更多查询后,我发现我的问题是字段的默认值,因此我修改了查询,现在可以正常使用: 问题答案: NULL值需要特殊处理:http : //dev.mysql.com/doc/refman/5.1/en/working-w

  • 问题内容: 非常感谢你的帮助。我有一个和表。位置 我对位置模型执行以下查询。 然后,我要对其执行附加查询并根据以下内容对其进行过滤 该查询并 没有 工作。它返回一个空对象。 这是参数: location_params 1} permitted: true> ads_params 1} permitted: true> 不允许这样输入特定的列: 我有postgresql,我没有考虑过使用SQL,但是

  • 我想让ElasticSearch在我的盒子上工作。我有以下映射: 所以我有一个“运动鞋”索引,它有一个“运动鞋”类型,一个“品牌”属性,它有一个“ID”和一个“标题”。 检查运动鞋是否存在,运行curl-xget“http://localhost:9200/sneakers/sneaker/1?prettley”,我得到: 现在,runningcurl-xget'http://localhost:

  • 问题内容: 我正在使用嵌套集模型在iPhone上的本地SQLite数据库中存储较大的数据层次结构。我从他们的网站上阅读了MySQL技术文章,了解如何执行此操作,但是他们建议的查询(以及我需要的查询)之一似乎不适用于SQLite,并且我不确定如何解决它。 SQLite报告不是列,我认为这是因为其子查询实现不完整。有人对如何解决此限制有任何想法吗? 查询的目的是获取给定父节点的所有直接子代。 问题答案