比如有2个表
students 、classessql:select c.* from students as s,classes as c where s.classid=c.classid and s.id='001'
我要通过一个学生id查出该学生所选科的班级。
比如:001这个学生选课为数学、语文。其中数学在一班、语文在二班。
那么我的要求就是输入001这个学号,要查出一班、二班这两个班级。
sql就是直接写的查询语句,我想在hibernate中实现上述的查询,不知道怎么写这个sql,大家帮帮忙吧
说明:在hibernate配置文件中没有配置这两个表的关联!配置文件也不能更改!
students → Student.java
classes  → Classes.java
我写的是:
select new Student from Student as s,Classes as c where s.classid=c.classid and s.id=? 
可是不行啊,麻烦大家了!指条路吧。

解决方案 »

  1.   

    配置文件如果不能改的话
    那用excutesqlquery去执行sql吧
    别用hql了
    一个个字段要打出来不能用*
    select xxx,xxx,xxx from student s left join classes c on s.classid = c.classid and 
      

  2.   

    如果是指定单表条件的话用where
      

  3.   

    使用createSQLQuery方法执行出错。
    我的sql是这样写的:
    select s.name from student s
    只查一个表的一个字段都不成功啊。
      

  4.   

    你查student 还是查 class啊。。
    这么写(HQL)试试:select c from Student as s,Classes as c where s.classid=c.classid and s.id=? 
    因为HQL是面向对象查询语句,所以s.classid需要在Student这个类里面定义的classid字段,注意大小写;c.classid需要在Class这个类里面定义classid这个字段,注意大小写;s.id需要Student这个类里面定义id这个字段,同样注意大小写。
      

  5.   

    我是要多表联合查询,但是我在测试createSQLQuery这个接口的时候,只查一个简单的sql都不好用,总是报错。
      

  6.   

    select c.* from students as s,classes as c where s.classid=c.classid and s.id='001' Hql 就可以查啊多表单表不都一样吗 你只是Sql中的表这里是对象
    hql:
    slelect new 包名.Classes(c.xx(参数写全)) from Students sa s,Classes as c where s.classid=c.classid and s.id='001'   Classes里面要写构造函数接受全部参数 并设置值
      

  7.   

    select {u.*} from users u 是可以的。
    select new 包名.类名(参数写全) from Student 还不行,没有测试通过;不管怎样,谢谢大家!