您的位置:首页 > 其它

Hibernate框架中Criteria的示例查询问题

2013-09-09 23:57 513 查看
今天在用Criteria的示例查询时,用了主键查询,怎么弄也是会出现全部的结果,具体代码如下:
public List<FilmInfo> queryFilmInfoByExample(FilmInfo filmInfo) {
// TODO Auto-generated method stub
List<FilmInfo> filmList = new ArrayList<FilmInfo>();
Session session = null;
try{
session = HibernateSessionFactory.getSession();
Criteria criteria = session.createCriteria(FilmInfo.class);
criteria.add(Example.create(filmInfo).excludeZeroes());		//示例查询
filmList  = criteria.list();
}catch(HibernateException e){
e.printStackTrace();
}
return filmList;
}


持久化类是:

public class FilmInfo {
private int filmId;
private String filmName;
private String actor;
private String director;
private int ticketPrice;
private FilmType filmType;

public FilmType getFilmType() {
return filmType;
}
public void setFilmType(FilmType filmType) {
this.filmType = filmType;
}
public int getFilmId() {
return filmId;
}
public void setFilmId(int filmId) {
this.filmId = filmId;
}
public String getFilmName() {
return filmName;
}
public void setFilmName(String filmName) {
this.filmName = filmName;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public int getTicketPrice() {
return ticketPrice;
}
public void setTicketPrice(int ticketPrice) {
this.ticketPrice = ticketPrice;
}

}
测试代码:

public static void main(String[] args) {
FilmInfo f = new FilmInfo();
f.setFilmId(11);
FilmDaoImpl fd = new FilmDaoImpl();
List<FilmInfo> list = fd.queryFilmInfoByExample(f);
for (FilmInfo filmInfo2 : list) {
System.out.println(filmInfo2.getFilmId()+"\t"+filmInfo2.getFilmName()+"\t"+filmInfo2.getActor());
}
}


在控制台打印出的SQl语句是:

Hibernate: select this_.FILMID as FILMID0_0_, this_.FILMNAME as FILMNAME0_0_, this_.ACTOR as ACTOR0_0_, this_.DIRECTOR as DIRECTOR0_0_, this_.ticketPrice as ticketPr5_0_0_, this_.TYPE_ID as TYPE6_0_0_ from java11.FILMINFO this_ where (1=1)

结果为:

42 兵临城下
让-雅克·阿诺

11 变形金刚3:黑月降临
迈克尔·贝

12 星际迷航
William Shatner

21 小时代
郭敬明

22 被偷走的那五年
黄真真

31 九品芝麻官之白面包青天王晶

32 举起手来(之二)追击阿多丸冯小宁

41 斯巴达300勇士
扎克·施耐德

51 先知 亚历克斯·普罗亚斯

52 大侦探福尔摩斯2:诡影游戏盖·里奇

61 海洋 雅克·贝汉;雅克·克鲁奥德

62 非洲2013
戴维·爱丁保罗夫

实在是弄不明白为什么最后的查询条件编程了where(1=1),

解决办法:

这个例子告诉我Creteria.
createCriteria(FilmInfo.class);的工作机制,不支持主键查询,否则结果为全部结果,


示例查询适合动态查询,如果用主键查询属于静态查询,得用HQL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: