还有一个问题!!String hsql="select a.ab001,a.ab002,a.ab006,b.aa002 as ab003 from db_xtwh_bmb as a left outer join db_xtwh_ryb as b on a.ab003=b.aa001 where a.ab004='0'";所查询出的a.ab001是个集合 如果等于"00"执行sql1 不是执行sql2这是我的程序:dao中 public List findbm(){
try{
String hsql="select a.ab001,a.ab002,a.ab006,b.aa002 as ab003 from db_xtwh_bmb as a left outer join db_xtwh_ryb as b on a.ab003=b.aa001 where a.ab004='0'";
return getHibernateTemplate().find(hsql);
}catch(Exception e){
return null;
}
}
------------------------------------------------------------------------
service.java
public List bmlist() {
// TODO Auto-generated method stub
List list=dao.findbm();
return null;
}
----------------------------------------------------------
我应该在那里写这个?
try{
String hsql="select a.ab001,a.ab002,a.ab006,b.aa002 as ab003 from db_xtwh_bmb as a left outer join db_xtwh_ryb as b on a.ab003=b.aa001 where a.ab004='0'";
return getHibernateTemplate().find(hsql);
}catch(Exception e){
return null;
}
}
------------------------------------------------------------------------
service.java
public List bmlist() {
// TODO Auto-generated method stub
List list=dao.findbm();
return null;
}
----------------------------------------------------------
我应该在那里写这个?
<subselect>
select a.id ,a.name , a.adress
from a
join b on a.name = b.name
</subselect>
<synchronize table="a"/>
<synchronize table="b"/>
<id name="name"/>
...
</class>
我现学现卖啊 你看管用不 请高手指正
StringBuilder hql = new StringBuilder();
hql.append("SELECT ")
.append( "a.id, ")
.append( "a.name, ")
.append( "a.age, ")
.append( "ab.adress ")
.append("FROM ")
.append( "A a ")
.append( "left outer join a.b ab, ")
.append("WHERE ...") Session session = this.getSession();
Query query = session.createQuery(hql.toString()); List<Object[]> tempList = query.list(); if (tempList != null && tempList.size() > 0)
{
YourVo yourVo = null;
Object[] date = null;
for (int i=0; i<tempList.size(); i++)
{
yourVo = new YourVo();
date = tempList.get(i);
if (date != null && date.length > 0)
{
repairPlanVO.setId(String.valueOf(date[0]));
repairPlanVO.setName(String.valueOf(date[1]));
repairPlanVO.setAge(String.valueOf(date[2]));
repairPlanVO.setAdress(String.valueOf(date[3]));
} resRet.add(yourVo);
}
}
StringBuilder hql = new StringBuilder();
hql.append("SELECT ")
.append( "a.id, ")
.append( "a.name, ")
.append( "a.age, ")
.append( "ab.adress ")
.append("FROM ")
.append( "A a ")
.append( "left outer join a.b ab ")
.append("WHERE ...") Session session = this.getSession();
Query query = session.createQuery(hql.toString());List<Object[]> tempList = query.list();if (tempList != null && tempList.size() > 0)
{
YourVo yourVo = null;
Object[] date = null;
for (int i=0; i<tempList.size(); i++)
{
yourVo = new YourVo();
date = tempList.get(i);
if (date != null && date.length > 0)
{
repairPlanVO.setId(String.valueOf(date[0]));
repairPlanVO.setName(String.valueOf(date[1]));
repairPlanVO.setAge(String.valueOf(date[2]));
repairPlanVO.setAdress(String.valueOf(date[3]));
} resRet.add(yourVo);
}
}
比如Set bs
取b的值,只需要用
Iterator it=a.getBs().iterator();
int i=0;
while(it.hasNext()){
b b1=new b();
b1=(b)it.next();
.....
}
这里b指的是b表的那个pojo类如果想用HQL也可以
String sql1="from a a1, b b1 where a1.name=b1.name and a1.id='"+id+"'";
List list1=null;
list1=((org.hibernate.classic.Session) session).createQuery(sql1).list();
Iterator it=list1.iterator();
Object[] obj=(Object[])it.next();
a a11=new a();
b b11=new b();
a11=(a)obj[0];
b11=(b)obj[1];到这估计你该会搞了,有几个表关联,obj对象里就会有多大,按照SQL里表的顺序,到obj里取出来强制转换就成。这个在hibernate的一些资料里面也有。代码我就是简单写了一下,你自己调试吧
2.你可以用视图查询数据
+" from DbXtwhBmb as a "
+"where a.ab004='0'";
System.out.println("java report : hsql : "+hsql);
return getHibernateTemplate().find(hsql);
就查不出来 而hsql="from DbXtwhBmb as a where a.ab004='0'";就能查出来 晕了我从网上查说可以这样写
还有最好把常用查询都做成视图(如果这些表没有外键关联的话)
如果有外键关联, 就更方便了。 映射的实体类里面就能取得其他关联表的数据。
SessionFactory sessionFactory=Configuration.buildSessionFactory("hibernate.cfg.xml");
Session session=sessionFactory.currentSession();
String hql="select new A(a.ab001,a.ab002,a.ab006,b.aa002 as ab003) from db_xtwh_bmb as a left outer join db_xtwh_ryb as b on a.ab003=b.aa001 where a.ab004='0'";
Query query=session.createQuery(hql);
List<A> list=query.list();
return list;
+" from DbXtwhBmb as a "
+"where a.ab004= "0 "";
System.out.println("java report : hsql : "+hsql);
return getHibernateTemplate().find(hsql);
就查不出来 而hsql="from DbXtwhBmb as a where a.ab004= "0 "";就能查出来 晕了我从网上查说可以这样写SessionFactory sessionFactory=Configuration.buildSessionFactory("hibernate.cfg.xml");
Session session=sessionFactory.currentSession();
String hql="select new A(a.ab001,a.ab002,a.ab006,b.aa002 as ab003) from db_xtwh_bmb as a left outer join db_xtwh_ryb as b on a.ab003=b.aa001 where a.ab004= "0 "";
Query query=session.createQuery(hql);
List <A > list=query.list();
return list;