- 浏览: 1325666 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (896)
- spring4 (14)
- hibernate3 (26)
- spring2 (35)
- struts2 (55)
- struts1 (15)
- 设计模式 (15)
- java (172)
- mybatis3 (11)
- sql (17)
- mysql (13)
- jbpm (10)
- J2EE (45)
- tools (29)
- js (83)
- 数据结构 (13)
- Html (26)
- web (22)
- flex (33)
- Oracle (57)
- linux (49)
- 算法 (6)
- 其它 (12)
- easyui (1)
- bootstrap (13)
- xml (2)
- tomcat (1)
- redis (10)
- activemq (2)
- webservice (11)
- maven (2)
- springboot (1)
- ubuntu (1)
- python (14)
- rocketmq (1)
- springcloud (10)
- opencv (1)
最新评论
-
mike_eclipse:
Hashtable是线程不安全的吗?好像是线程安全的吧?
多线程之集合类 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
lodop打印控件 -
xingcxb:
经过测试,假的,依旧会出现中文乱码!!!!store方法里面采 ...
java 读写Properties文件,不会出现中文乱码 -
tiger20111989:
...
Spring注解方式管理事务 -
zw7534313:
...
js 文字上下滚动 无间断循环显示
<many-to-one name="TCustomerComeCategory" class="com.hnyxsm.modules.customer.TCustomerComeCategory" fetch="join">
//把fetch改成join就能解决 could not initialize proxy - the owning Session was closed这个问题
inner join(内连接)
left outer join(左外连接)
right outer join(右外连接)
full join (全连接,并不常用)
语句inner join, left outer join 以及 right outer join 可以简写。
from Cat as cat join cat.mate as mate left join cat.kittens as kitten
通过HQL的with关键字,你可以提供额外的join条件。
from Cat as cat left join cat.kittens as kitten with kitten.bodyWeight > 10.0
还有,一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接 与延迟声明(lazy declarations).
from Cat as cat inner join fetch cat.mate left join fetch cat.kittens
一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。同时,相关联的对象 并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。
from Cat as cat inner join fetch cat.mate left join fetch cat.kittens child left join fetch child.kittens
假若使用iterate()来调用查询,请注意fetch构造是不能使用的(scroll() 可以使用)。fetch也不应该与setMaxResults() 或setFirstResult()共用,这是因为这些操作是基于结果集的,而在预先抓取集合类时可能包含重复的数据,也就是说无法预先知道精确的行数。fetch还不能与独立的 with条件一起使用。通过在一次查询中fetch多个集合,可以制造出笛卡尔积,因此请多加注意。对bag映射来说,同时join fetch多个集合角色可能在某些情况下给出并非预期的结果,也请小心。最后注意,使用full join fetch 与 right join fetch是没有意义的。
如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),可以使用 fetch all properties 来强制Hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。
from Document fetch all properties order by name
from Document doc fetch all properties where lower(doc.name) like ''%cats%''
left outer join(左外连接)
right outer join(右外连接)
full join (全连接,并不常用)
语句inner join, left outer join 以及 right outer join 可以简写。
from Cat as cat join cat.mate as mate left join cat.kittens as kitten
通过HQL的with关键字,你可以提供额外的join条件。
from Cat as cat left join cat.kittens as kitten with kitten.bodyWeight > 10.0
还有,一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接 与延迟声明(lazy declarations).
from Cat as cat inner join fetch cat.mate left join fetch cat.kittens
一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。同时,相关联的对象 并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。
from Cat as cat inner join fetch cat.mate left join fetch cat.kittens child left join fetch child.kittens
假若使用iterate()来调用查询,请注意fetch构造是不能使用的(scroll() 可以使用)。fetch也不应该与setMaxResults() 或setFirstResult()共用,这是因为这些操作是基于结果集的,而在预先抓取集合类时可能包含重复的数据,也就是说无法预先知道精确的行数。fetch还不能与独立的 with条件一起使用。通过在一次查询中fetch多个集合,可以制造出笛卡尔积,因此请多加注意。对bag映射来说,同时join fetch多个集合角色可能在某些情况下给出并非预期的结果,也请小心。最后注意,使用full join fetch 与 right join fetch是没有意义的。
如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),可以使用 fetch all properties 来强制Hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。
from Document fetch all properties order by name
from Document doc fetch all properties where lower(doc.name) like ''%cats%''
通常情况下,我们并不使用映射文档进行抓取策略的定制。更多的是,保持其默认值,然后在特定的事务中, 使用HQL的左连接抓取(left join fetch) 对其进行重载。这将通知 Hibernate在第一次查询中使用外部关联(outer join),直接得到其关联数据。 在条件查询 API中,应该调用 setFetchMode(FetchMode.JOIN)语句。
在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛session already closed Exception; Open Session In View提供了一种简便的方法,较好地解决了lazy loading问题.
它有两种配置方式OpenSessionInViewInterceptor和OpenSessionInViewFilter(具体参看SpringSide),功能相同,只是一个在web.xml配置,另一个在application.xml配置而已。
Open Session In View在request把session绑定到当前thread期间一直保持hibernate session在open状态,使session在request的整个期间都可以使用,如在View层里PO也可以lazy loading数据,如 ${ company.employees }。当View 层逻辑完成后,才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。
OpenSessionInViewInterceptor配置
OpenSessionInViewFilter配置
它有两种配置方式OpenSessionInViewInterceptor和OpenSessionInViewFilter(具体参看SpringSide),功能相同,只是一个在web.xml配置,另一个在application.xml配置而已。
Open Session In View在request把session绑定到当前thread期间一直保持hibernate session在open状态,使session在request的整个期间都可以使用,如在View层里PO也可以lazy loading数据,如 ${ company.employees }。当View 层逻辑完成后,才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。
OpenSessionInViewInterceptor配置
- <beans>
- <bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
- <property name="sessionFactory">
- <ref bean="sessionFactory"/>
- </property>
- </bean>
- <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="interceptors">
- <list>
- <ref bean="openSessionInViewInterceptor"/>
- </list>
- </property>
- <property name="mappings">
- ...
- </property>
- </bean> ... </beans>
<beans> <bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="openSessionInViewInterceptor"/> </list> </property> <property name="mappings"> ... </property> </bean> ... </beans>
OpenSessionInViewFilter配置
- <web-app>
- ...
- <filter>
- <filter-name>hibernateFilter</filter-name>
- <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class>
- <!-- singleSession默认为true,若设为false则等于没用OpenSessionInView -->
- <init-param>
- <param-name>singleSession</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter> ... <filter-mapping>
- <filter-name>hibernateFilter</filter-name>
- <url-pattern>*.do</url-pattern>
- </filter-mapping> ... </web-app>
发表评论
-
hibernate Search
2010-10-15 10:09 1408hibernate Search 使用过lucene的人都 ... -
org.hibernate.LazyInitializationException: could not initialize proxy - no Sessi
2010-09-10 15:57 20201.设置里 lazy = "false" ... -
Hibernate数据检索策略
2010-08-09 08:52 1224Hibernate数据检索策略: Hiberna ... -
Java、hibernate、sql类型对照
2010-08-09 08:48 1502基本值类型: Java基本类型、对应的Hibernate映射 ... -
Hibernate事务隔离级别
2010-08-09 08:46 6271Hibernate事务隔离级别: 隔离级别 ... -
Hibernate数据检索策略
2010-08-06 15:58 1346Hibernate数据检索策略:Hibernate的数据检索策 ... -
生成model类的serialVersionUID
2010-06-25 16:36 1127生成model类的serialVersionUID: 在命令 ... -
spring 与 hibernate Annotation配置(entry)
2010-06-13 16:53 2041(5)TCompanyInfo.java import ... -
Hibernate的复杂用法HibernateCallback
2010-06-13 09:00 1140HibernateTemplate还提供一种更加灵活的方式来操 ... -
hibernate3与spring2零配置
2010-06-11 15:19 1413ssh除了xml配置之外,还可以用标注式配置: (1)sp ... -
hibernate3 annotation 的实例 3 (one to many)
2010-03-24 15:19 2106http://bigcat.easymorse.com/?p= ... -
hibernate annotation spring
2010-03-24 08:35 1096http://2625962-163-com.iteye.co ... -
hibernate3 annotation 的实例 2
2010-03-23 15:51 1814实例二:(主键sequence策 ... -
hibernate3 annotation的实例
2010-03-23 14:55 1996实例一:一个对象的增删改查: import java. ... -
query specified join fetching, but the owner of the fetched association
2010-03-04 09:57 1973错误原因分析: 首先看HQL语句: ... -
illegal attempt to dereference collection
2010-03-04 09:12 3700首先说一句:是版本的问题! 我写的hql为: from D ... -
深化学习hibernate
2010-01-29 14:10 11303.4.5. 查询语言中 ... -
查询hibernate 部分数据
2010-01-29 10:56 1408hibernate查出来人部分数据基本上是数组,有的时候需要对 ... -
hibernate 批量添加
2009-12-29 13:37 2067public void createRolePermissio ... -
hibernate 常见错误
2009-12-24 12:52 9711.org.hibernate.LazyInitializat ...
相关推荐
在探讨Hibernate框架中的`lazy`属性时,我们深入解析了其功能、应用场景以及与之相关的潜在问题,尤其关注于如何有效利用此特性以优化数据库性能和应用响应速度。 ### Hibernate框架简介 Hibernate是一个开放源码...
标题中的"Dwr+Hibernate的Lazy问题"涉及到两个主要技术:Direct Web Remoting (DWR) 和 Hibernate。DWR 是一种让 JavaScript 在浏览器中直接调用服务器端 Java 方法的技术,而 Hibernate 是一个流行的Java持久化框架...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种重要的对象关系映射策略,用于提高应用程序的性能。懒加载的基本思想是延迟加载,即当真正需要数据时,才去数据库加载。在这个场景中,我们关注的是...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,它允许我们推迟对关联对象的加载,直到真正需要它们的时候。标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合...
在探讨“解决Lazy最有效的方法”这一主题时,我们深入剖析了Servlet中处理懒加载(Lazy Loading)的技术细节,特别是如何在Java环境下优化资源管理,确保应用性能与响应速度。以下将从标题、描述以及部分代码片段出发...
解决 JPA 中 Lazy 加载的问题,可以在 setUp() 函数中加入以下代码: ```java SessionFactory sessionFactory = lookupSessionFactory(request); Session hibernateSession = getSession(sessionFactory); ...
Hibernate 中 fetch=FetchType.LAZY 懒加载失败处理方法是 Hibernate 框架中的一种常见问题。当我们在 Hibernate 中使用懒加载特性时,可能会遇到 LazyInitializationException 异常,这是因为 Hibernate 的 ...
Hibernate是一款强大的Java持久化框架,它为Java开发者提供了一种对象关系映射(ORM)解决方案,使得在Java应用中管理数据库变得更为简单。这个“hibernate中文文档”压缩包包含的是Hibernate框架的中文版API文档,...
以上内容只是Hibernate中文开发者文档的基础概述,实际文档会包含更详细的使用示例、最佳实践和解决常见问题的方法。通过深入学习,开发者能够熟练掌握Hibernate,提高开发效率,减少数据库操作的复杂性。
在Java的持久化框架Hibernate中,自动更新实体类的问题是一个常见的困扰开发者的问题。当实体类的状态发生改变,Hibernate默认会尝试将这些变化同步到数据库,这在某些情况下并不符合我们的需求。本文将深入探讨这个...
通过《Hibernate中文参考文档 V3.2.chm》,开发者可以深入理解Hibernate的每个特性,解决实际开发中的问题,提升开发效率。无论是初学者还是经验丰富的开发者,都能从中受益,进一步提升自己的技能水平。这个文档...
Hibernate支持懒加载(Lazy Loading),意味着关联对象不会在初始化时立即加载,而是在需要时才从数据库中获取。对于一对多或多对多关系,可以使用`@OneToMany`和`@ManyToMany`注解进行映射,并通过`fetch`属性配置...
描述中提到的"Hibernate 参考手册中文API文档.chm"是一个帮助文件,通常包含详细的技术指南、类库参考和示例,旨在帮助开发者理解Hibernate框架的各种功能和用法。SSH框架是指Struts、Spring和Hibernate的组合,是...
要在Hibernate中启用实体对象的延迟加载,需要在映射文件中为相应的类添加`lazy="true"`属性,例如: ```xml <class name="com.neusoft.entity.User" table="user" lazy="true"> ... ``` **工作原理:** 当执行...
在Hibernate中,Fetch策略是解决数据加载时效率与灵活性的关键之一。 ### Hibernate Fetch策略详解 #### 1. Fetch策略概述 Fetch策略决定了如何加载实体及其关联的数据。在Hibernate中,主要有两种Fetch策略:...