【问题标题】:hibernate lower not working休眠较低不工作
【发布时间】:2017-02-16 22:42:43
【问题描述】:

我正在尝试在 hibernate 中进行不区分大小写的搜索,所以我在数据库字段上使用 lower() 函数,在参数上使用 java String.toLowerCase(),如下所示:

String query = "from LdapData where lower(ntid) = ? ";
Query stmt = session.createQuery(query);
stmt.setString(0, ntid.toLowerCase());
result = (List<LdapData>)stmt.list();

当 SQL Developer 中的查询显示有一个空列表时,结果返回一个空列表,但为大写。似乎它没有被转换为较低的。

谁能看出这有什么问题?

【问题讨论】:

  • 这是一个字符串 ntid
  • 在数据库中它是 NTID NOT NULL VARCHAR2(50)
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。

标签: java hibernate


【解决方案1】:

试试这个

String query = "from LdapData where lower(ntid) like ? ";

【讨论】:

  • 为什么会有不同?
  • like 将不区分大小写
  • ... 而= 不是吗?
  • 你是对的 = 也不区分大小写。我只是检查一下
【解决方案2】:

尝试将Locale 设置为lowercase() 方法,如:

stmt.setString(0, ntid.toLowerCase(new Locale("tr-TR")));

(将 tr-TR 替换为您的区域设置 ID http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多