getfirstresult()返回0

hvvq6cgz  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(267)

我最近在做一个java教程,我在查询方面遇到了一个问题。一开始我正在把人添加到数据库中。
图1:

图2:

现在,当我用query检查这个人是否在那里时,get firstresult()返回零:/。
person类示例,带查询:

@Entity
@NamedQuery(name="findQuery", query="select p from Person p where p.id=:id")
public class Person {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    //@Column(name="personId")
    private long id;
    //@Column(name="personName")
    private String name;
    //@Column(name="personAge")
    private int age;
    //@Column(name="personNumber")
    private int number;

现在检查查询的类:

@Override
public String read(long id) {

    TypedQuery<Person> createNamedQuery = em.createNamedQuery("findQuery", Person.class);
    createNamedQuery.setParameter("id", id);

    int firstResult = createNamedQuery.getFirstResult();
    System.out.println("test: "+firstResult);

    if (createNamedQuery.getFirstResult()>0) {
        Person singleResult = createNamedQuery.getSingleResult();
        creationMessage = "User: " + singleResult.getName() + " added to database with success";
    } else {
        creationMessage = "User was not added to database";
    }
    return creationMessage;
}

当我尝试查找id为1:/的人时,getfirstresult返回零。有人能帮帮我吗,我做错了什么?
我不知道这是否重要,但数据源是jta.:)

pdsfdshx

pdsfdshx1#

我认为你应该试着重构一下你的解决方案 firstResult 主要用于分页目的,我想这不是您在这里要找的。
更自然的方法是获得单个结果,如果没有发现任何结果,则捕获并异常:

TypedQuery<Person> createNamedQuery = em.createNamedQuery("findQuery", Person.class);
createNamedQuery.setParameter("id", id);

try{
   Person singleResult = createNamedQuery.getSingleResult();
   creationMessage = "User: " + singleResult.getName() + " added to database with success";
} catch(NoResultException e) {
    creationMessage = "User was not added to database";
}
ni65a41a

ni65a41a2#

来自javadoc的 Query#getFirstResult() :
查询对象设置为检索的第一个结果的位置。如果setfirstresult未应用于查询对象,则返回0
你从没打过电话 setFirstResult ,这是理所当然的 getFirstResult 应该返回零。我怀疑你混淆了这个方法,因为它可以检测是否有匹配的记录。相反,请使用以下代码:

TypedQuery<Person> createNamedQuery = em.createNamedQuery("findQuery", Person.class);
createNamedQuery.setParameter("id", id);
try {
    Person singleResult = createNamedQuery.getSingleResult();
    creationMessage = "User: " + singleResult.getName()+" added to database with success";
}
catch (Exception e) {
    System.out.println("Either less than one row, more than one row, or some other error");
}
``` `getSingleResult()` 如果找不到任何用户记录或找到多条记录,将引发异常。通过捕获异常,可以确定查询是否成功。迭代结果集通常是这样工作的;你一次只看一张唱片,边读边想。

相关问题