JPA 字符串比较
我使用 JPQL 查询编写了一个简单的登录系统,它总是不返回结果:
public boolean check(String name, String password) {
final String qstring="SELECT e FROM Muser e WHERE e.name = '"+name+"'";
Muser user;
try{
user = em.createQuery(qstring, Muser.class).getSingleResult();
}
catch(NoResultException e){
return false;
}
return password.equals(user.getPassword());
}
当我将其更改为本机查询时:
user = (Muser) em.createNativeQuery(qstring, Muser.class).getSingleResult();
或 int 表达式:
final String qstring="SELECT e FROM Muser e WHERE e.id = "+id;
一切正常。有什么问题吗?谢谢一百万!
I've written a simple login system using a JPQL query, which always returns no result:
public boolean check(String name, String password) {
final String qstring="SELECT e FROM Muser e WHERE e.name = '"+name+"'";
Muser user;
try{
user = em.createQuery(qstring, Muser.class).getSingleResult();
}
catch(NoResultException e){
return false;
}
return password.equals(user.getPassword());
}
When I changed it to a native query:
user = (Muser) em.createNativeQuery(qstring, Muser.class).getSingleResult();
or an int expression:
final String qstring="SELECT e FROM Muser e WHERE e.id = "+id;
It goes all right. What's the problem? Thanks a million!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这可能是 JPA 提供程序中字符串比较的问题。您是否对区分大小写的数据进行测试?
您还可以尝试(这是首选方式)使用参数,而不是手动编写语句。它不仅更安全(防止 SQL 注入),而且更快:不仅对于 Java(不需要连接字符串)而且对于 DB(可以准备查询)所有执行一次)。可能是这样的:
It might be a problem with string comparison in your JPA provider. Do you test it on the case-sensitive data?
You could also try (and it's the preferred way) using parameters instead of crafting your statement by hand. It's not only safer (prevents SQL injection) but also faster: not only for Java (you don't concatenate Strings) but also for the DB (the query can be prepared once for all executions). It might be something like this:
我认为问题是因为字符串比较。我对此问题的解决方案是:
使用小写字母进行比较。
I think problem is because of String comparison.My solution to this problem is:
using lowercase for comparison.