Hibernate 模糊查询订单ID(ID为数字型)以前根据姓名来模糊查询
criteria.add(Restrictions.like("name", keyword,MatchMode.ANYWHERE));
这是可以的
但是根据ID来模糊查询
criteria.add(Restrictions.like("id", keyword,MatchMode.ANYWHERE));
这就不行了 可能行为ID为数字型
不不知道大家有没有办法 谢谢大家
criteria.add(Restrictions.like("name", keyword,MatchMode.ANYWHERE));
这是可以的
但是根据ID来模糊查询
criteria.add(Restrictions.like("id", keyword,MatchMode.ANYWHERE));
这就不行了 可能行为ID为数字型
不不知道大家有没有办法 谢谢大家
{
private int postId;
private String postName;
private String postNo;
public String getPostNo() {
return postNo;
}
public void setPostNo(String postNo) {
this.postNo = postNo;
}
// private Integer postNo;
// public Integer getPostNo() {
// return postNo;
// }
// public void setPostNo(Integer postNo) {
// this.postNo = postNo;
// }
public String getPostName() {
return postName;
}
public void setPostName(String postName) {
this.postName = postName;
}
public int getPostId() {
return postId;
}
public void setPostId(int postId) {
this.postId = postId;
}
}
Criteria c = s.createCriteria(SshPostB.class);
c.add(Restrictions.sqlRestriction("to_char({alias}.post_Id) like ?","1%",Hibernate.STRING));
System.out.println(c.list().size());
哈哈,Restrictions.sqlRestriction("to_char({alias}.post_Id) ,有转换成 字符的呀。那楼主去试试吧。
看看2楼代码
Session session=HibernateSessionFactory.getSession();
Transaction tran=null;
try{
tran=session.beginTransaction();
Criteria criteria = session.createCriteria(TUser.class);
String keyword="999";//例如关键字为999 在数据库设计的时候 id为int型
criteria.add(Restrictions.like("id",keyword,MatchMode.ANYWHERE));
Iterator<TUser> it=criteria.list().iterator();
while(it.hasNext()){
TUser user=it.next();
System.out.println("id==="+user.getId());
}
session.flush();
tran.commit();
}catch(HibernateException e)
{
e.printStackTrace();
if(tran!=null);
try{
tran.rollback();
}catch(HibernateException e1)
{
e1.printStackTrace();
}
}
finally
{
HibernateSessionFactory.closeSession();
}
}错误如下:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select this_.id as id0_, this_.name as name0_0_, this_.dep_id as dep3_0_0_ from bbs.t_user this_ where this_.id like ?
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at org.hibernate.type.IntegerType.set(IntegerType.java:39)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:62)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:44)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1115)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1177)
at org.hibernate.loader.Loader.doQuery(Loader.java:390)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)
at org.hibernate.loader.Loader.list(Loader.java:1577)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:111)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1322)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:300)
at hibernate.model.Test.main(Test.java:56)
不知道怎样用 Criteria或Restrictions结合 才能够是数字型ID可以模糊查询?但是用Query q=session.createQuery("from TUser where id like '%999%'"); //可以模糊查询不知道怎样用 Criteria或Restrictions结合 才能够是数字型ID可以模糊查询?谢谢大家
如果是MySQL:
c.add(Restrictions.sqlRestriction("CAST({alias}.id AS CHAR) like ?", "%1%", Hibernate.STRING));