`

[hibernate]where clause is ambiguous 解决办法

阅读更多
使用Criteria方式查询,如果使用like字段,当关联的表里面有重复字段,则会报 where clause is ambiguous 异常
例如
假设 ModelA 中有一个关联ModelB,且两个Model中都有同样的字段 name,如果对name使用like方式查询,如下
Session session = HibernateManager.getSession();
String str = "aaaaa";
Criteria cri = session.createCriteria(ModelA.class);
cri.add(Expression.or(Expression.sql("name like '%"+str+"%'"), Expression.sql("address like '%"+str+"%'")));
return cri.list();

则会报: ERROR JDBCExceptionReporter.java Column 'name' in where clause is ambiguous

解决办法:
  在 name前加上'this_.'就可以了,告诉mysql你使用 ModelA所对应的表
cri.add(Expression.or(Expression.sql("this_.name like '%"+str+"%'"), Expression.sql("this_.address like '%"+str+"%'")));

注:如果你想使用 ModelB所对应的表,把配置文件中的show_sql打开
<property name="show_sql">true</property>
看看ModelB 所使用的别名,填到name前面就可以
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics