大家好,第一次发贴,望大家多多指教.
问题背景:
我需要用Criteria或DetachedCriteria查一个到多个表的某几个字段.(因为要只查某几个字段,所以用了Projection,不知有没有其他方法?)
[code]
DetachedCriteria criteria = DetachedCriteria.forClass(Company.class);
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Property.forName("companyName"));
projectionList.add(Property.forName("C.cityName"));
projectionList.add(Property.forName("A.areaName"));
criteria.createAlias("city", "C")
.createAlias("area", "A")
.setProjection(projectionList);
return getHibernateTemplate().findByCriteria(criteria);[/code]
打印出来的sql语句是:
[code]
select .... from company C inner join City C1 on C.city_id=C1.city_Id
inner join area A on C.area_id=A.area_id;
[/code]
以前没有用projection时可以用下面的代码来达到生成left outer join sql的效果
[code]
DetachedCriteria criteria = DetachedCriteria.forClass(Company.class);
criteria.setFetchMode("city", FetchMode.JOIN);
criteria.setFetchMode("area", FetchMode.JOIN);
return getHibernateTemplate().findByCriteria(criteria);[/code]
问题:
1. 怎样才能变成用left outer join查询而不用inner join?
2. 这个问题顺便问问,查一个到多个表的某几个字段时,查询结果是Object[],能不能让它返回要查询的那个对象,而只有要查的几个field有值,其他为空?
望大家能指点一二,谢谢
问题背景:
我需要用Criteria或DetachedCriteria查一个到多个表的某几个字段.(因为要只查某几个字段,所以用了Projection,不知有没有其他方法?)
[code]
DetachedCriteria criteria = DetachedCriteria.forClass(Company.class);
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Property.forName("companyName"));
projectionList.add(Property.forName("C.cityName"));
projectionList.add(Property.forName("A.areaName"));
criteria.createAlias("city", "C")
.createAlias("area", "A")
.setProjection(projectionList);
return getHibernateTemplate().findByCriteria(criteria);[/code]
打印出来的sql语句是:
[code]
select .... from company C inner join City C1 on C.city_id=C1.city_Id
inner join area A on C.area_id=A.area_id;
[/code]
以前没有用projection时可以用下面的代码来达到生成left outer join sql的效果
[code]
DetachedCriteria criteria = DetachedCriteria.forClass(Company.class);
criteria.setFetchMode("city", FetchMode.JOIN);
criteria.setFetchMode("area", FetchMode.JOIN);
return getHibernateTemplate().findByCriteria(criteria);[/code]
问题:
1. 怎样才能变成用left outer join查询而不用inner join?
2. 这个问题顺便问问,查一个到多个表的某几个字段时,查询结果是Object[],能不能让它返回要查询的那个对象,而只有要查的几个field有值,其他为空?
望大家能指点一二,谢谢