我一直在谷歌搜索一个直接的解决方案,让我们的新postgresql + hibernate设置使用不区分大小写的搜索,没有运气。我们之前一直在使用mysql,它有一个不区分大小写搜索的策略,但是Postgresql似乎缺乏这个。
例如,我希望Hibernate / Postgresql为以下各项返回相同的结果:
SELECT * FROM Foo where bar = 'Hello World';
和
SELECT * FROM Foo where bar = 'hello wOrlD';
我发现的唯一解决方案是以某种方式将“ilike”关键字嵌入到生成的查询中,但是您认为在Hibernate中会有某种配置可以满足这一需求吗?我对Hibernate和Postgresql的体验是有限的,所以任何输入都会受到赞赏。
由于
答案 0 :(得分:2)
在SQL中我以前玩过这个技巧,我认为在大多数RDBMS中都符合SQL标准:
SELECT * FROM UPPER(bar) = 'HELLO WORLD'
您可以在传入参数之前进行大写。这可能与在Hibernate中使用Restrictions.ilike()criteria进行查询相同。
答案 1 :(得分:0)
没有办法简单地tell Postgres to ignore case。
如果更改需要进行此比较的所有列的类型是一个选项,请查看the citext
datatype。
答案 2 :(得分:0)
Spring可以很方便地配置如何将hibernate和postgres连接在一起,事务(如果需要)以及如何获取A HibernateSession对象。实际上使用spring你可以使用HibernateTemplates(一个Spring对象)来为你代理很多东西。
但是,您仍然具有针对您运行的查询的编程能力。在这种情况下使用HibernateTemplate你可以写:
String parameter = "hello wOrlD"
DetachedCriteria criteria = DetachedCriteria.forClass(objectClass)
.add(Restrictions.ilike("name", parameter)));
List<Object> result = template.findByCriteria(criteria);
或者您可以使用Restrictions.eq或sqlRestriction来实现它的sql片段。
答案 3 :(得分:0)
感谢您的回答;似乎没有一种简单的方法来解决数据库/ jdbc级别上的此问题。所以我们的解决方案是,尽管不是最佳的:
当我们使用mysql时,只需要在my.cfg / ini中设置策略 - 我不明白为什么它在postgresql中变得更复杂。这是生活,虽然呃?