当撇号出现时,java Hibernate条件无法找到结果
简而言之,问题是:
休眠标准。当查询包含撇号“
长版本:
冬眠:3.2.7。ga
当用户注册时,他们将通过以下hibernate调用保存在数据库中:
User user;
//set data in user
getHibernateTemplate().save(user);
正如预期的那样,这会妥善处理特殊字符,如撇号“
但当我使用以下代码检索用户时,它无法找到在用户名中使用撇号注册的用户:
public User getUserByUsername(String username) {
Criteria criteria = this.getSession().createCriteria(User.class);
criteria.add(Restrictions.eq("loginid", username));
List<Utente> users = criteria.list();
User user = null;
if (!users.isEmpty()) {
user = users.get(0);
}
return user;
}
该代码适用于normal用户名,例如“test”,但当给出用户名时,例如“test'test”标准。列表将返回一个空列表。 我检查了一下,我知道用户被保存在数据库中,它无法用这个代码检索它
有什么想法吗
更多信息
“条件列表”实际运行此代码(为了清晰起见,删除了一些字段):
select this_.id as id0_0_, this_.loginid as loginid0_0_, this_.password as password0_0_, this_.email as email0_0_ from user this_ where this_.loginid=?
loginid在Java中是一个字符串,在SQL代码中是一个可变的字符(255)。 映射为:
<property
name="loginid"
type="java.lang.String"
column="loginid"
not-null="true"
unique="true"
/>
杂项信息:
- 数据库:Postgres SQL 9.3
- 冬眠。方言=org。冬眠地方话后希腊方言
- 数据源类:“org.springframework.jdbc.dataSource.driverManager数据源”
# 1 楼答案
佩巴克。。。登录表单被设置为将用户登录截断为比注册表单短的字符数——巧合的是,我用撇号测试的字符串也很长。简单地说,问题是因为标准中使用了错误的用户名