我最近在做一个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.:)
2条答案
按热度按时间pdsfdshx1#
我认为你应该试着重构一下你的解决方案
firstResult
主要用于分页目的,我想这不是您在这里要找的。更自然的方法是获得单个结果,如果没有发现任何结果,则捕获并异常:
ni65a41a2#
来自javadoc的
Query#getFirstResult()
:查询对象设置为检索的第一个结果的位置。如果setfirstresult未应用于查询对象,则返回0
你从没打过电话
setFirstResult
,这是理所当然的getFirstResult
应该返回零。我怀疑你混淆了这个方法,因为它可以检测是否有匹配的记录。相反,请使用以下代码: