今天在用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