当存在撇号时,Hibernate Criteria无法找到结果

时间:2013-12-12 10:29:19

标签: java hibernate criteria

问题简而言之:

当查询包含撇号'

时,Hibernate criteria.list无法找到对象

长版本:

Hibernate:3.2.7.ga

当用户注册时,它们将通过以下休眠调用保存在数据库中:

 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;
}

代码与普通用户名(例如“test”)一起使用,但在提供类似“test'test”的用户名时,criteria.list将返回一个空列表。 我查了一下,我知道用户在db上保存了,它根本无法使用此代码检索它。

有什么想法吗?

更多信息

标准列表实际运行此代码(为清晰起见,删除了一些字段):

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中的String,SQL代码中的字符变化(255)。 映射为:

<property
    name="loginid"
    type="java.lang.String"
    column="loginid"
    not-null="true"
    unique="true"
 />

其他信息:

  • 数据库:Postgres SQL 9.3
  • hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
  • dataSource类:“org.springframework.jdbc.datasource.DriverManagerDataSource”

1 个答案:

答案 0 :(得分:1)

PEBAK ...登录表单设置为将用户登录截断为比注册表单更短的字符数量 - 巧合的是我用撇号测试的字符串也很长。简单地说,问题是由于用于标准的用户名不正确。