1+N:
1+N问题用:fetch=FetchType.LAZY 或在HQL中加 (from XXX left join fetch ....)解决
FetchType适合于不取子类的时候,
left join fetch适合于马上要子类,但不能执行太多SQL语句影响效率的时候
import org.hibernate.Query;//不是javax的
Query q = session.createQuery("from XXX x where x.value > '123'")//XXX是类名,x是别名
List<XXX> objs = (List<XXX>)q.list;
for(Category c : objs)
{
System.out.println(g.getName());
}
//对象不会重复:主键不同时(跟没写一样)
session.createQuery("select distinct x from XXX x order by c.value dsec")
//占位符:冒号加标注
Query q = session.createQuery("from XXX x where x.value > :min and x.value < :max");
q.setParameter("min",2);
q.setInteger("max",8);//可以指定类型
//分页:
Query q = session.createQuery("from XXX x where x.value > '123'");
q.setMaxResults(5);//每页5条
q.setFirstResult(3);//从第三条开始
//取出Object[]
Query q = session.createQuery("select x.id ,x.value from XXX x order by c.value dsec")//XXX是类名,x是别名
List<object[]> objs = (List<object[]>)q.list;
for(object[] os : objs)
{
System.out.println(os[0] + os[1]));
}
//导航:
//通过“点”找到设置好的映射关系,就不用连接表了:x.aaa.bbb.value
session.createQuery("from XXX x where x.aaa.bbb.value = 250");
//组装临时对象VO,要求VO里要有相应的构造函数
session.createQuery("select new Temp(x.id,x.value) from XXX x");
//uniqueResult
Query q = session.createQuery("from XXX x where x = :MySearch");
XXX x = new XXX();
x.setId(1);
q.setParameter("MySearch",x);
xxx res = (XXX)q.uniqueResult();//知道结果是唯一的,就不要List了
System.out.println(res.getCount());
//测试集合为空
("from XXX x where x.aaa is empty");
//Like
("from XXX x where x.aaa like '%A'");
//exists
("from XXX x where not exists (select from where)");