先表达一下找了一个下午到现在还木有吃饭的感觉,
第一、我怎么这么笨
第二、我果然还是个菜鸟
正题:
三张表 UserSpecSer Service 以及Parameter
String hql="select uss from UserSpecSer uss inner join fetch uss.service s inner join fetch s.parameters where uss.user.userId=?";
List list=getHibernateTemplate().find(hql, userId);
一开始调试了很多遍木有报异常,但是list一直都是空的/(ㄒoㄒ)/~~
我以为不能这样查,但是又记得可以这样用,差点想把lazy取消
好吧,怀着好奇的心试着同样的方法查了其它的表
String hql="select u from User u inner join fetch u.userRoles r inner join fetch r.role ro inner join fetch ro.rolePermissions where u.userId=?";
它…………………………………………是可以粗来的……………………!!!!!!!
心中是冰火两重天,更加让我好奇为啥list为空,它特么还木有报错
再试了试debug了一下结果它就出错了(还蛮激动的~~~^_^~~~~~~)
hibernate-Path expected for join 纳尼这是什么东东,so百度罗,话说我就奇怪google一下还要fang对吧,有点懒,而且像我这种菜鸟百度就足够解决我的问题了。then 我觉得不管怎样只要能解决自己的疑惑的方法都可以,虽然说真的是百度出来的答案都是各抄各的,还不带标记转载。
正题:额…………好像我也木有找出why。因为我后面再试了试发现又不报错了*—*
哈哈……有说是因为hql中join查询
select modle(实际就是你自己取个别名) from TableA modle inner join fetch modle.B where modle.c=?
如果B是另一张表的属性的话就OK,如果是个对象的话就会出现这个错误。
但是我查的就是对象啊,也可以粗来啊。或许它说的是sql(⊙o⊙)…
其实最后的问题在于我虽然看了inner join 还有什么left join 、right join心里想是对啊就是要查两张表共有的数据啊,不西有内连接吗妈妈妈妈妈妈吗………………
泪奔啊……如果Parameter 表里面没有相应的service的数据,那么就是空值,所以就算UserSpecSer和Service有对应的值,它的整体的结果还是NULL!!!
Last:
改成
String hql="select uss from UserSpecSer uss inner join fetch uss.service s left join fetch s.parameters where uss.user.userId=?";
木有Parameter咱们就left join就好了嘛…………哭…………
特写此文警诫粗心的笨蛋仔仔!哈哈哈哈哈………………
分享到:
相关推荐
### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...
### HQL连接查询和注解使用总结 #### HQL连接查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种更自然的方式查询对象,而不是直接查询底层数据库表。HQL支持多种连接查询...
HQL 中的 JOIN 语句用于关联多个表,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN。 * INNER JOIN:select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name as name2 ...
**HQL查询语言基础** HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似,但专为面向对象编程设计。HQL允许开发者以类和对象的方式编写查询,而不是直接处理...
HQL支持内连接(INNER JOIN)、左连接(LEFT JOIN)等,可以方便地处理关联关系。例如: ```sql SELECT s, c FROM Student s LEFT JOIN s.courses c ``` 这个查询将返回每个学生及其所有关联的课程。 **6. HQL的聚合...
HQL Hibernate 查询语言 HQL(Hibernate Query Language)是 Hibernate 中的一种强大的查询语言,它看起来很像 SQL,但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解...
《Hibernate HQL查询语法详解》 Hibernate,作为Java领域中广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和...
### Hibernate 查询语言 (HQL) #### 一、简介 Hibernate 查询语言(HQL)是一种功能强大的查询语言,它与 SQL 在语法上有一定的相似性,但 HQL 被设计成面向对象的语言,能够理解诸如继承、多态和关联等概念。这种...
【Hibernate HQL 深度历险】是一个关于掌握Hibernate查询语言高级特性的技术主题。Hibernate Query Language(HQL)是Hibernate框架提供的面向对象的查询语言,它与SQL类似但针对对象模型,允许开发者直接查询对象而...
HQL作为一种高度集成的查询语言,不仅简化了数据访问的复杂度,而且通过其丰富的功能,如JOIN和FETCH子句,以及对特定属性的选择,为开发人员提供了灵活的数据检索手段。掌握HQL,意味着能够在Hibernate框架中实现...
- 可以直接在HQL中查询关联的对象,如LEFT JOIN、INNER JOIN等。 - 通过导航属性访问关联对象,无需明确指定JOIN语句。 7. **子查询** - HQL支持在SELECT、FROM、WHERE子句中使用子查询。 - 子查询可以返回单个...
《HQL语言教程[归类].pdf》是一个关于Hibernate Query Language(HQL)的详细教程,专注于面向对象的查询技术。HQL是Hibernate框架中用于检索和操作对象关系映射数据的强大工具,其语法和SQL有诸多相似之处,但设计...
HQL支持不同类型的`join`,包括`inner join`(内连接)、`left outer join`(左外连接)、`right outer join`(右外连接)和`full join`(全连接)。 - **内连接(inner join)**: ```hql select employee.ID as...
其中,`INNER JOIN`、`LEFT OUTER JOIN`和`RIGHT OUTER JOIN`可以简化为: ``` FROM Cat AS cat JOIN cat.mate AS mate LEFT JOIN cat.kittens AS kitten ``` 此外,`FETCH`连接允许在一个选择语句中同时初始化父...
连接类型参照ANSI SQL,包括`inner join`、`left outer join`、`right outer join`和`full join`。简写形式如`join`和`left join`也是允许的。 ### 4. `with`关键字 `with`关键字允许你在连接时添加额外条件,例如...
它支持连接(inner/outer/full joins)、投影、聚合、分组、排序、子查询以及SQL函数调用。 2. 简单HQL示例: ```java Query query = session.createQuery("from User user where user.name like 'J%'"); List...
### HQL连接查询详解 #### 一、HQL连接查询概述 在开发过程中,当我们需要从数据库中的多个表中获取数据时,经常会用到连接查询(Join Query)。HQL(Hibernate Query Language)作为Hibernate框架提供的查询语言...
使用`JOIN`关键字可以实现对象之间的关联查询,包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN)。 8. **子查询**: HQL支持在查询语句中嵌套查询,可以作为WHERE子句的一部分,也可以在SELECT语句中...
SELECT s, c FROM Student s INNER JOIN s.courses c WHERE c.cname = 'Database' ``` 此查询将返回所有选修了“Database”课程的学生和该课程。 通过以上介绍可以看出,HQL提供了一种强大且灵活的方式来处理面向...