`
mayabin
  • 浏览: 41218 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

hibernate中不能用left join on的解决办法

阅读更多
 hibernate中不能用left join on的解决办法


hibernate中多表查询时,有时需要用到left join,但是不能用left join on。
也就是说,on这个条件是需要写到hbm配置文件中去的。

比如,汽车和车轮这两个对象,我想做下面的查询,,select 汽车 where 车轮=固特异。

其实这个查询很简单,用left join就能实现。但是需要在汽车的hbm配置文件中关联车轮。
HQL语句像这样,select 汽车 LEFT JOIN 车轮 where 车轮=固特异。

但是如果你不在汽车的hbm文件中建立和车轮的关联,就需要用其他办法了,left join on=no, 在hql中没有on这个关键字。

首先说明,这种设计方法并不好,能避免尽量避免。
解决办法有2个。
一个是用普通的多表查询,比如  select 汽车 from 汽车,车轮 where 汽车.id=车轮.属主.id and 车轮=固特异。
但是有时候会有重复的记录,需要添加distinct关键字。
另一个是用子查询,比如, select 汽车 from 汽车 where 汽车.id IN (select 车轮.属主.id from 车轮 where 车轮=固特异)。


尽量建立关联,直接使用left join是最方便的办法。
分享到:
评论
3 楼 lz_cleaner 2008-09-11  
fanguanqun 写道
lz,你这哪是实现left join 的哦,明明是实现join嘛。
你先搞清楚left join 和join 的区别再发帖好吗?
这是误导新人啊!

对呀。
2 楼 fanguanqun 2008-05-31  
lz,你这哪是实现left join 的哦,明明是实现join嘛。
你先搞清楚left join 和join 的区别再发帖好吗?
这是误导新人啊!
1 楼 kikizzw 2007-09-19  
是不是啊 。。我看网上说的有用left join on这个。。哎 。。晕了 。。

相关推荐

    Hibernate问题解决

    - **解决方法:** 在Hibernate中,可以通过HQL或者Criteria API来实现`LEFT JOIN`和`RIGHT JOIN`。 - **LEFT JOIN:** ```java String hql = "FROM UserInfo u LEFT JOIN FETCH u.role r WHERE r.description ...

    hibernateHQL关联查询

    - **左外连接(Left Outer Join)**:除了返回两个表中满足连接条件的记录外,还会返回左表中不满足连接条件但右表中不存在匹配项的记录。 - **右外连接(Right Outer Join)**:除了返回两个表中满足连接条件的...

    hibernate的使用心得

    然而,`fetch join`有一些限制,比如不应与`setMaxResults()`或`setFirstResult()`一起使用,也不能与独立的`with`条件结合,且在查询多个集合时可能导致笛卡尔积。 总的来说,理解并熟练掌握HQL的`from`子句、隐式...

    hibernate查询语句--HQL

    left join Department as department on employee.DepNo = department.ID ``` 左连接会返回所有员工记录,即使他们在`Department`表中没有对应的记录也会显示为`null`。 3. **右连接**: ```hql select ...

    Hibernate查询语句教程a

    如在部门和员工的例子中,`select employee, department from Employee as employee join Department as department on employee.depNo = department.id`将返回所有部门和其对应的员工。 - **LEFT (OUTER) JOIN**:...

    Hibernate 查询语言

    2. **LEFT OUTER JOIN**:返回左表中的所有记录,并在右表中匹配的记录不存在时,用 NULL 填充。 ```hql select employee.ID as id1, employee.Name as name1, department.ID as id2, department.Name as name2 ...

    HQL查询语言基础知识

    HQL 查询语言基础知识是 Hibernate 中的基础组件之一,对于开发人员来说,掌握 HQL 查询语言是必不可少的。 1.单表查询 HQL 中的单表查询使用 FROM 语句,例如:FROM eg.Cat as cat,其中 cat 只是一个别名,为了...

    Hibernate HQL教程

    SELECT s, c FROM Student s LEFT OUTER JOIN FETCH s.courses c ON c.cno = sc.cno; ``` - **解释**: 左外抓取连接会立即加载关联对象,提高性能。 ##### 1.4.7 右外连接 - **语法**: ```hql SELECT s, c FROM...

    Hibernate中的多表查询及抓取策略

    在Java开发中,Hibernate是一个非常流行的ORM(Object-Relational Mapping)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇文章主要探讨了Hibernate中的多表查询和抓取策略,这对于理解...

    HQL查询语言基础.

    FULL JOIN返回两个表中所有记录的组合,包括匹配和不匹配的记录。但在实际应用中,FULL JOIN相对较少使用,因为它可能导致大量的结果行。 ### 3. 大小写敏感性 HQL是大小写敏感的,这意味着类名、属性名和别名必须...

    关联关系按条件查询细

    1. **外连接**:分为左连接(LEFT JOIN)和右连接(RIGHT JOIN),在没有查询条件时,能获取所有信息,左边或右边表的所有记录都会被包含。当有查询条件时,只保留符合条件的关联记录。 2. **内连接**(INNER JOIN...

    HQL连接查询和注解使用总结

    - 注意:如果右侧可能为`NULL`,则不能使用`fetch`关键字进行集合填充。 - **右外连接(Right Outer Join)** - 语法:`right[outer]join` - 描述:右外连接返回右表的所有行以及左表匹配的行,如果没有匹配,则...

    HQL查询语言基础

    HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似但更面向对象。HQL提供了丰富的功能来查询和操作数据库中的对象,使得开发人员可以更加专注于业务逻辑而不是...

    SSH+EASY-UI的账务管理系统

    用MAVEN,SPRING,...AS `goodsquality`,avg(`b`.`price`) AS `price`,`a`.`id` AS `id`,`a`.`name` AS `name` from (`goods` `a` left join `goodsprice` `b` on((`a`.`id` = `b`.`goods_id`))) group by `a`.`id`

    HQL查询语言基础!

    from Employee as employee left join Department as department on employee.DepNo = department.ID ``` - **右外连接(right outer join)**:返回右侧表(Department)的所有记录,如果左侧表(Employee)中...

    HQL 连接查询

    - **Full Outer Join (全外连接)**:表示两个表中的所有记录都会出现在结果集中,如果某一边没有匹配,则会用NULL填充。 例如,下面的HQL语句展示了如何使用左外连接: ```hql from Student as s left join s....

    mybatis-day02培训内容1

    外连接会返回所有匹配和不匹配的记录,不匹配的记录用NULL填充。左外连接返回左表的所有记录及与之匹配的右表记录;右外连接反之;全外连接则返回所有两边表的记录。 3. 自连接(Self Join):一个表自身进行连接,...

    ibatis做连接查询 .doc

    LEFT JOIN t_class c ON d.dno = c.dno ``` 这里使用了LEFT JOIN来连接`t_depart`和`t_class`表,获取所有部门及其关联的班级信息。 4. **Mapper接口方法**: 在`DepartMapper`接口中,对应上述XML中的`...

    支付宝Java工程师笔试题

    ### 支付宝Java工程师笔试题解析 #### 智力部分 ... LEFT JOIN bb ON aa.X = bb.X WHERE bb.X IS NULL; ``` 这种方式利用了索引加速连接操作,并通过`LEFT JOIN`和`WHERE`条件有效地过滤出了结果。

    jsp实现下拉选择框多种源码

    + "FROM EM_CustHorExpenses a LEFT JOIN BS_Customer b ON a.customer = b.id " + "LEFT JOIN SM_Staff c ON a.auditPeople = c.id " + "WHERE a.owner = ?"; PreparedStatement stmt = conn.prepareStatement...

Global site tag (gtag.js) - Google Analytics