有三个表:
学生信息(student):
学生号,姓名,家庭地址
学生毕业评定信息(stu_post):
学生号,毕业鉴定(优秀、良好、一般、及格、不及格)
学生违章记录(stu_error):
学生号、错误信息、时间、上课教室关于这三个表做一个查询
学生号、姓名、错误信息、时间、家庭地址、毕业鉴定如果在oracle中,查询语句如下:
select a.学生号,姓名,错误信息,时间,家庭地址,毕业鉴定
from stu_error a, student b, stu_post c
where a.学生号=b.学生号(+)
and   a.学生号=c.学生号(+)如果用java中,用jpa的sql语句如何实现啊?
多谢高手指点!

解决方案 »

  1.   


    select 
           学生号,姓名,错误信息,时间,家庭地址,毕业鉴定 
    from 
          student str
    inner join
          stu_post  post
    inner ioin 
          stu_error error
    on
          (str.studentId=post.studentId and stu.studentId = error.studentId)--或者:select 
          学生号,姓名,错误信息,时间,家庭地址,毕业鉴定 
    from 
          student ,stu_post ,stu_error
    where 
          student.studentId = stu_post.studentId
    and  
          student.studentId = error.studentId
          
          
      

  2.   

    学生表A
    学生评价表B
    学生违纪表CA表对于B表可以是1对多(可以没有,也可以有很多,但至少是1条),A表对C表可以是1对多(同前)伪代码:
    A a = em.find(A.class,1);//找到学号是1的学生
    然后
    a.getB();//获得a学生的评价信息,如果没有那就没有,如果有那就有。
    Set(C)sets = a.getC();//获得a学生的违纪信息集合
      

  3.   


    你不是要用JPA,给我SQL干啥。好囧。
      

  4.   


    简单说 只要你知道 学生的编号 你就知道 这个学生的全部 信息。写SQL干啥 你要用的 是 JPA JPA是规范 根本不在乎SQL是如何拼写的。面向对象的查询。。
      

  5.   

    多谢指点!
    不明白 (萌动的眼神) 说:
    写SQL干啥 你要用的 是 JPA JPA是规范 根本不在乎SQL是如何拼写的。
    是社么意思。
    另外,javaxiaochouyu 说:
    select 
          学生号,姓名,错误信息,时间,家庭地址,毕业鉴定 
    from 
          student ,stu_post ,stu_error
    where 
          student.studentId = stu_post.studentId
    and  
          student.studentId = error.studentId
    这样的话,我理解只能查询出已毕业学生的信息。
    我理解应该写成:
    select 
          学生号,姓名,错误信息,时间,家庭地址,毕业鉴定 
    from 
          student s
    left join stu_post post on s.学生号=post.学生号
    left join stu_error error on s.学生号=error.学生号
    可是报 生成query错误,显然是sql语句不对,我在网上到处搜索,好像需要配ManyToOne 或者OneToMany,
    可我这三个表并不是完全意义上的ManyToOne或OneToMany的表啊。
    多谢指点!
      

  6.   

    JPA 支持原生 SQL 语句,直接把你的语句复制到 createNativeQuery 方法中去。
      

  7.   


    我按照你的提示试过,但会报错:
    javax.servlet.ServletException: java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)是不是我没有配置manytoone 或者 onetomany的原因啊。
    是不是所有使用join 的地方都必须配置manytoone 或者 onetomany啊。
      

  8.   

    你的实体是怎样写的?也就是三者之间的关系用jpa怎样去关联的?
      

  9.   

    你这3个表在物理上有外键关系吗?
    如果有,检索主表出来的实体应该直接可以通过get方法得到你需要的信息
      

  10.   


    三个表是独立的实体,没有用jpa建立关联,实际上我就不会用jpa建立关联,刚学习jpa。
      

  11.   

    用left join 去关联试试
      

  12.   


    我在上面提到过,这样写不行的。
    我理解应该在jpa中配置表之间的关系,可是我不会配。
      

  13.   

    select  
      学生号,姓名,错误信息,时间,家庭地址,毕业鉴定  
    from  
      student s
    left join stu_post post on s.学生号=post.学生号
    left join stu_error error on s.学生号=error.学生号
    可是报 生成query错误,显然是sql语句不对,我在网上到处搜索,好像需要配ManyToOne 或者OneToMany,
    可我这三个表并不是完全意义上的ManyToOne或OneToMany的表啊。
    多谢指点!