【问题标题】:How to rewrite this Oracle Query to hibernate Query? [duplicate]如何将此 Oracle 查询重写为休眠查询? [复制]
【发布时间】:2013-09-02 04:29:38
【问题描述】:

我在 oracle 中编写了这个查询

Student_Master 有这些字段stud_id,stud_nameStudent_detailcourse_id,course_name,cou_stud_id 等等。

如果student_detailcou_stud_id为空或空,我需要从这两个表中选择记录,这意味着选择该条件的所有匹配记录。

SELECT stud_id,stud_name,course_name ,course_id FROM STUDENT_MASTER,STUDENT_DETAIL WHERE stud_id(+)=cou_stud_id.

如何写入 HQL 查询? 这是我的原始场景 我有两个 hbm 文件 ADVMAgencyMaster.hbm.xml,ADVRoheader.hbm.xml 对应的 pojo 类是 ADVMAgencyMaster.java,ADVroheader.java。

匹配两个表中条件为 oracle 中的 MAMAID(+)=TROHAMAID 的记录。请告诉 HQL 中的编写者如何

【问题讨论】:

  • 在不知道如何将表映射到实体的情况下进行讨论是没有意义的。一旦你正确映射到你的实体(包括关系),这应该是 HQL 的一个非常基本的用法,你应该从任何 Hibernate 介绍材料中学习。
  • 解释如何在oracle和HQL中使用左外连接(+)。MyMapping工作完美。stud_id是主要的,co_stu_id是外键。
  • @karthik.A.M 请检查一下,如果你的映射没问题,你的目标没什么大不了的。即使是谷歌上的一个小研发也可能会帮助你。
  • @karthik.A.M O-R 映射不仅仅是将表对应于实体,还将每列对应于一个字段。显然你仍然有赤字映射
  • Query qry=Session.createQuery("SELECT SM.stud_id,SM.stud_name,SD.course_name ,SD.course_id FROM STUDENT_MASTER SM LEFT JOIN SM.STUDENT_DETAIL SD WHERE SM.stud_id=SD.cou_stud_id " )。在这个STUDENT_MASTER中,STUDENT_DETAIL是对应表的bean类

标签: oracle hibernate hql


【解决方案1】:

这可能会帮助你,它会找到所有有或没有细节的学生。

from Student_Master SM Left Join Student_detail SD on SM.stud_id = SD.cou_stud_id
Where SM.stud_id = (student_id to filter)

如果您在 Hibernate Using (@OneToOne or @OnetoMany Relationship) 中正确映射了您的两个类,您可以轻松获取有关学生对象的详细信息。

【讨论】:

  • 在这个 ON 是未定义的关键字它抛出一个错误
  • @karthik.A.M ON 是大多数 sql 语言中的关键字
  • @karthik.A.M 请显示您的异常或错误!
  • 我正在用 HQL 编写这个查询
  • 对不起,抛出异常,ON 是未定义的关键字
【解决方案2】:

试试这个: 向您的实体 Student_Master 添加一个对象 studentDetail,因此查询变为:

from Student_Master SM 
Left Join fetch SM.studentDetail.cou_stud_id
Where SM.stud_id = (student_id to filter)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多