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

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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值