有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当撇号出现时,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) 个答案

  1. # 1 楼答案

    佩巴克。。。登录表单被设置为将用户登录截断为比注册表单短的字符数——巧合的是,我用撇号测试的字符串也很长。简单地说,问题是因为标准中使用了错误的用户名