gpt4 book ai didi

java - JPA 查询不起作用

转载 作者:行者123 更新时间:2023-12-01 13:40:16 26 4
gpt4 key购买 nike

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

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: An exception occurred while creating a query in EntityManager:
Exception Description: Syntax error parsing [SELECT * FROM User u WHERE u.nick =:nick)].
[21, 21] A select statement must have a FROM clause.
[7, 7] The left expression is missing from the arithmetic expression.
[9, 20] The right expression is not an arithmetic expression.
[41, 42] The query contains a malformed ending.

请问问题出在哪里?

最佳答案

如果 nick 是实体的主键 (@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();

通过返回一个简单的 boolean 值,您可以最大限度地减少数据库响应。

关于java - JPA 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20873359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com