用户登录
用户注册

分享至

hibernate hql select

  • 作者: zx00
  • 来源: 51数据库
  • 2020-12-15
兄弟,你给的分实在是太少,但是考虑到你可能急用,所以给你详解如下:
示例:按照你的思路:写一个java bean(省略掉了setter,getter方法)
public class Man
{
private int id;
private String name;
private int age;
private String wife;
private String address;

public Man()
{

}
}
类Man有四种属性:id,name,age,wife,address,其中还包含一个空的构造方法。
(1)在什么情况下,不用写select
当我们查询的是Man的所有属性时,我们可以不写select。如:from Man;当然也可以写,但格式要发生改变:select m from Man (as) m;括号中的as可写可不写。
(2)在什么情况下,写select
当我们查询的不再是Man的所有属性是,我们必须要写上select。如:我们查询Man中的name和age属性时,我们必须这么写:select s.name,s.age from Man s;也可以不用别名:select name,age from Man;
(3)写与不写的区别
当我们查询的对象属性超过一个时,Hibernate所返回的查询结果集是Object[]对象数组。如:List result=session.createQuery("select name,age from Man").list();
Iterator iter=result.iterator();
while(iter.hasNext())
{
Object[] row=(Object[])iter.next();//取出一行记录,其中包含name,age两列。
System.out.println("Result is:"+row[0]+","+row[1]);
//其中row[0]就是查询语句中涉及的第一个属性name,row[1]就是第二个属性age。
}
这时,就要涉及到你所说的第二个问题了,如何将我们查询返回的Object[]数组对象转变成我们先前创建的java bean即Man对象哪,很简单,在Man类中,构建一个新的带参数的构造方法:
public Man(String name,int age)
{
this.setName(name);
this.setAge(age);
}
参考下面的select语句,你就明白为什么写这两个参数了。
这样,我们就可以直接使用了,如下:(为了你的理解,我使用了泛型)
List result=session.createQuery("select name,age from Man").list();
Iterator iter=result.iterator();
while(iter.hasNext())
{
Man man=(Man)iter.next();
System.out.println("Result is:"+man.getName()+","+man.getAge());
}
上述方法的输出是一样的。当然了,如果更加严格一点,上面的select语句可写为:
select new Man(name,age) from Man




  你查的应该是几个字段。
这样的话你可以在实体Bean中写一个你要查找的那几个字段的构造函数。

查询的时候可以这样写
select new 实体Bean(a.实体Bean的属性,a.实体Bean的属性) form 实体Bean as a

试试看 不知道在问



  String sql = "select t.trade,t.parent from Trade t where t.parent = '"+tradeID+"'";

====================================

你select的只是bean中的某几个属性,强转到bean当然要报错

你select后面把所有的属性都放进去,强转应该就不报错了。
不过如果这样的话,和
String sql ="from Trade t where t.parent = '"+tradeID+"'";
就没区别了

==========

你为什么一定要用“select”?



  你应该用 session.createQuery("from bean where *******");这样子。。bean就是hibernate配的javabean
如果复制查询没办法用了session.createSQLQuery("select ***")..那这个和普通jdbc查询没啥区别了。。返回的query。。再List list = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
再拿list的map.get("ID") 拿字段的值。。自己封装javeBean吧




  from employee a where to_char(a.emp_birthday,'yyyy-mm-dd') between to_char(sysdate-5,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd') order by a.emp_id desc;



  public Trade findSmallTrade(Trade t) {
String sql = "from Trade t where t.parent =" +t.tradeID;
return (Trade)this.find(sql);
}
如果你是 有个Trade 实体类 那么通过他的id查的话 就这样子 查出来的是一条记录就是一个实体的值 因为id唯一。
这样的话其实很好 你取的时候想去什么都行只不过get罢了 没必要非得只查到那个2个字段,都查了 想要那个get出来多好。
软件
前端设计
程序设计
Java相关