- 浏览: 66717 次
文章分类
最新评论
-
小灯笼:
ZooKeeper分布式专题与Dubbo微服务入门网盘地址:h ...
dubbo+zookeeper构建高可用分布式集群 -
qingfengxiu1985:
有没有全部工程代码?发一个呗,邮箱:qingfengxiu19 ...
mongodb+spring +morphia完整版框架搭建
首页说级联操作的基本配置:
在实体中定义操作关联的对象
实体:
配置文件:
Part.hbm.xml:
Img.hbm.xml:
写代码的时候,在Controller中使用关联表的数据是否报no session错误。百度一下是因为在applicationContext.xml 中用来延迟加载
在控制器调用的时候就会报no session 错误。因为session 在hibernate执行之后会自动关闭。所以找不到
解决方案:在web.xml 配置一个过滤器。是hibernate自带的一个session延迟关闭过滤。注意的是在hibernate3和hibernate4配置的不一样。当然还有一种就是把延迟加载关闭,但是这样数据大了之后,造成服务器运行效率级低。
在实体中定义操作关联的对象
实体:
package com.tosit.ligc.entity; import java.util.Date; import java.util.Set; public class Part { private Integer part_id; private Integer par_Part_id; private String part_name; private String part_content; private Date part_time; private String part_img; private Set<Part> part; private Set<Img> img; public Set<Part> getPart() { return part; } public void setPart(Set<Part> part) { this.part = part; } private Set<News> newsset; public Set<Img> getImg() { return img; } public void setImg(Set<Img> img) { this.img = img; } public Set<News> getNewsset() { return newsset; } public void setNewsset(Set<News> newsset) { this.newsset = newsset; } public Integer getPart_id() { return part_id; } public Part() { super(); } public void setPart_id(Integer part_id) { this.part_id = part_id; } public String getPart_name() { return part_name; } public void setPart_name(String part_name) { this.part_name = part_name; } public String getPart_content() { return part_content; } public void setPart_content(String part_content) { this.part_content = part_content; } public Date getPart_time() { return part_time; } public void setPart_time(Date part_time) { this.part_time = part_time; } public Integer getPar_Part_id() { return par_Part_id; } public void setPar_Part_id(Integer par_Part_id) { this.par_Part_id = par_Part_id; } public String getPart_img() { return part_img; } public void setPart_img(String part_img) { this.part_img = part_img; } }
package com.tosit.ligc.entity; public class Img { private Integer img_id; private String img_url; private String img_title; private Integer news_id; private Integer foods_id; private Integer stay_id; private Part part; public Part getPart() { return part; } public void setPart(Part part) { this.part = part; } public Integer getImg_id() { return img_id; } public void setImg_id(Integer img_id) { this.img_id = img_id; } public String getImg_url() { return img_url; } public void setImg_url(String img_url) { this.img_url = img_url; } public String getImg_title() { return img_title; } public void setImg_title(String img_title) { this.img_title = img_title; } public Integer getNews_id() { return news_id; } public void setNews_id(Integer news_id) { this.news_id = news_id; } public Integer getFoods_id() { return foods_id; } public void setFoods_id(Integer foods_id) { this.foods_id = foods_id; } public Integer getStay_id() { return stay_id; } public void setStay_id(Integer stay_id) { this.stay_id = stay_id; } }
配置文件:
Part.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- package 实体所在的包名 --> <hibernate-mapping package="com.tosit.ligc.entity"> <class name="Part" table="part"> <id name="part_id"> <generator class="increment"></generator> </id> <property name="part_name"></property> <property name="part_content"></property> <property name="part_time" ></property> <!-- 级联操作 --> <!-- 延迟加载 --> <many-to-one name="par_Part_id" class="Part" column="par_Part_id" lazy="proxy" not-null="true" > </many-to-one> <set name="part" table="part" cascade="all" inverse="true"> <!--cascade: 它用于指定如何操纵与当前对象关联的其他对象 all表示所有,还有save-update persist,merge,delete等等 Inverse:负责控制关系,默认为false,也就是关系的两端都能控制,如果为ture表示把 关系交给对方控制,一般情况为true not-null表示保存时候不能为空 --> <key column="par_Part_id" not-null="true"></key> <one-to-many class="Part" /> </set> <set name="img" table="img" cascade="all" inverse="true"> <key column="part_id"></key> <one-to-many class="Img"/> </set> </class> </hibernate-mapping>
Img.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.tosit.ligc.entity"> <class name="Img" table="img"> <id name="img_id"> <generator class="native"></generator> </id> <property name="img_url"></property> <property name="img_title"></property> <property name="news_id"></property> <property name="foods_id"></property> <property name="stay_id"></property> <many-to-one name="part" class="Part" column="part_id" lazy="proxy" not-null="true"/> </class> </hibernate-mapping>
写代码的时候,在Controller中使用关联表的数据是否报no session错误。百度一下是因为在applicationContext.xml 中用来延迟加载
default-lazy-init="true" default-autowire="byName"><!-- 是否延迟加载。通过名字实现自动装配 -->
在控制器调用的时候就会报no session 错误。因为session 在hibernate执行之后会自动关闭。所以找不到
package com.tosit.ligc.web; import java.util.HashSet; import java.util.List; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.core.metadata.HanaCallMetaDataProvider; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.tosit.ligc.entity.News; import com.tosit.ligc.entity.Part; import com.tosit.ligc.service.PartService; @Controller public class PartController { @Autowired @Qualifier("partService") private PartService partService; /** 获取一级栏目信息 */ @RequestMapping("/index") public String index(ModelMap map){ List<Part> partlist = partService.getPartlist(); map.put("partlist", partlist); return "index"; } /** * 获取二级栏目信息 * */ @RequestMapping("/onePart") public String onePart(ModelMap map,@RequestParam(value="id")Integer id){ String result = "index"; List<Part> onelist = partService.getPartlist(id); map.put("onelist", onelist); if(id==1){ result="index"; }else{ result ="Second/Lj-NewList"; } return result; } /** * 获取动态信息 * */ @RequestMapping("/newslist") public String newslist(ModelMap map,@RequestParam(value="id")Integer id){ this.index(map); List<News> list = partService.getnewlist(id); map.put("list", list); return "Second/Lj-NewList"; } }
解决方案:在web.xml 配置一个过滤器。是hibernate自带的一个session延迟关闭过滤。注意的是在hibernate3和hibernate4配置的不一样。当然还有一种就是把延迟加载关闭,但是这样数据大了之后,造成服务器运行效率级低。
<!-- 可以使spring自动事务延迟到视图解析后(用完数据后)才关闭 ,解决hibernate的延迟加载问题--> <filter> <filter-name>osivFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <!-- 指定过滤器使用的sessionFactory bean id,默认就是sessionFactory --> <param-name>sessionFactoryBeanName</param-name> <param-value>sessionFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>osivFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
发表评论
-
Java 设计模式源码
2020-08-17 20:17 141经过一段时间学习和实践,整理了绝大多数设计模式源码demo 。 ... -
mac ngrok 使用
2018-12-20 18:22 873ngrok 是一个反向代理,通过在公共端点和本 ... -
Java元组学习
2018-12-19 15:38 619在Java 中我们平时用的接口和方法 只是单一 ... -
密码学2 密码安全注意
2018-11-30 15:11 6041.Java API支持 位于java.security包及子 ... -
base64 和 base32 源码解析
2018-11-30 14:19 1483package com.zd.demo; import ... -
maven 常用命令
2018-01-22 14:43 365mvn compile 编译源代码 mvn test-comp ... -
上传excel 通过url下载文件
2017-07-06 16:22 1058/** * 下载图片 */ ... -
多线程实现原理并发机制
2017-03-07 20:29 819进程: 查询百度大致可以理解为一段具有独 ... -
网络编程TCP/IP协议组
2017-03-04 13:42 557TCP/IP是个协议组: 主要可以分为4层,分别是应 ... -
Guava包的ListenableFuture解析
2016-10-09 13:40 1045package com.downjoy.test.guava. ... -
spring+guava事件异步分发处理
2016-10-09 09:56 4370Guava是Google开源的一个Java基础类库,它在Goo ... -
httpUtil工具和apche httpclient 工具类使用
2016-09-26 15:38 2408httpUtil请求网络请求工具: package demo ... -
mongodb+spring +morphia完整版框架搭建
2016-09-09 10:22 5716Morphia是一个开放源代 ... -
mongodb注解详解
2016-09-06 09:26 40541、@Entity 如果你想通过Morphia把你的对 ... -
自定义MD5加盐加密方式代码实现
2016-09-02 16:45 5061按照自己的理解对密码加盐加密。当用户注册时候会先生成盐值 ... -
密码学
2016-08-25 11:14 5711 密码学简介 2.1 ... -
kafka
2016-08-11 14:08 719Kafka is a distributed,partiti ... -
dubbo+zookeeper构建高可用分布式集群
2016-08-24 09:47 4964(1) 当服务越来越多时, ... -
java生产6为邀请码
2016-08-09 17:23 1957package demo.dcn.vo; import ... -
jxl
2016-08-09 14:30 497Java生成和操作Excel文件 package dem ...
相关推荐
一级缓存是基于Session的,它保存了自Session打开以来所有操作的对象状态,减少了对数据库的直接访问。Session提供`evict`和`clear`方法来管理缓存内容。二级缓存则基于SessionFactory,能在进程甚至集群间共享数据...
工具类用于创建Mybatis的session工厂并关闭session,以管理数据库连接。 ###Mybatis的映射文件配置 对象映射文件配置包括SQL语句、映射规则以及结果集映射等。通过映射文件可以完成复杂的SQL操作,将查询结果直接...
2. **初始化时机**:懒加载只能在session打开状态下工作,一旦session关闭,尝试访问懒加载属性将会抛出`LazyInitializationException`异常。因此,需要确保在业务逻辑中合理安排初始化关联数据的时间点。 3. **透明...
3. **Session接口**:学习Session的创建、打开和关闭,以及使用Session进行CRUD(创建、读取、更新、删除)操作的基本方法。 **三、Hibernate4 案例分析** 1. **简单对象的增删改查**:通过创建一个简单的User实体...
`SessionFactory`通常在应用启动时创建一次,`Session`在每次数据库操作时打开和关闭。 6. **CRUD操作** - **Create(创建)**: 使用`Session.save()`或`Session.persist()`方法保存新对象到数据库。 - **Read...
6. **级联操作**: 可以配置实体间的级联操作,如保存、删除一个对象时,其关联的对象也会被相应操作。 7. **自动建表和反向工程**: Hibernate可以通过元数据自动创建数据库表结构,也可以将现有数据库反向工程为...
- **脱管态**: 对象之前是持久态,但当前 Session 已关闭,对象与数据库的连接断开。 **关联管理** Hibernate 支持多种类型的关联,包括一对一、一对多、多对一和多对多。关联可以通过 XML 映射文件或注解来配置,...
在实际应用中,我们通常在每个业务事务中创建一个Session,完成操作后关闭。 接下来,我们来看看Hibernate如何执行查询。最基础的是HQL(Hibernate Query Language),它是Hibernate提供的面向对象的查询语言,类似...
7. **级联操作与缓存策略**:理解级联操作(cascade)的概念,它可以将操作传播到关联的对象上。同时,Hibernate提供了不同级别的缓存策略,包括第一级缓存和第二级缓存,以及查询缓存。 8. **性能优化**:手册会...
除了基本的CRUD操作,Hibernate还支持级联操作、延迟加载、缓存机制、查询语言HQL(Hibernate Query Language)以及 Criteria 查询等高级特性。HQL是一种面向对象的查询语言,类似于SQL但更加面向Java对象,使得查询...
5. 关闭Session:操作完成后,记得关闭Session,释放资源。 四、实体映射 1. 注解映射:通过@Entity、@Table、@Id等注解将Java类映射到数据库表。 2. XML映射:使用.hbm.xml文件,详细描述实体类与数据库表的对应...
7. **Cascading(级联操作)和Lazy Loading(延迟加载)**:级联操作允许在一个对象的操作影响到关联的对象;延迟加载则是在需要时才加载关联对象,以提高性能。 8. **SessionFactory和Session的生命周期**:...
2. **Session**: 实现了CRUD(创建、读取、更新、删除)操作,是短生命周期的,通常每个用户请求对应一个Session。 3. **Query 和 Criteria API**: 提供了面向对象的查询方式,包括HQL(Hibernate Query Language)...
6. 关闭 Session 和 SessionFactory。 **Hibernate 映射机制** Hibernate 使用 XML 文件或注解来实现对象和数据库表之间的映射。映射文件(.hbm.xml)定义了实体类和数据库表之间的对应关系,包括字段映射、主键...
2. Session:作为持久化操作的主要接口,Session负责管理对象的状态,包括对象的创建、更新、删除以及查询。 3. Transaction:提供事务管理,确保数据的一致性和完整性。 4. Criteria查询和HQL(Hibernate Query ...
7. 关闭Session:每次操作完毕,记得关闭Session,释放资源。 四、Hibernate特性 1. 缓存机制:一级缓存(Session级缓存)和二级缓存(SessionFactory级缓存),提升性能,减少数据库访问。 2. 支持懒加载(Lazy ...
- 注意防止“懒加载异常”(LazyInitializationException),确保在Session关闭前使用延迟加载的数据。 本套API文档详细阐述了以上知识点,涵盖了Hibernate 3.6的各个方面,是学习和使用Hibernate 3.6的重要参考...
- **级联操作**: 一个对象的操作影响关联对象,如级联保存、删除等。 - **实体生命周期事件**: 可监听对象的创建、更新、删除等事件,实现业务逻辑。 学习和使用Hibernate需要掌握上述核心概念和用法,通过实际项目...
7. **关闭Session**: 操作完成后,关闭Session,释放资源。 **其他重要概念** 1. **级联操作(Cascading)**: 可以设置实体间的关系,比如一个实体的更改会影响到关联的实体,如`CascadeType.ALL`表示所有操作都...
- **数据操作**:`Session`是Hibernate的主要工作接口,提供了增删改查(CRUD)方法,如`save()`, `update()`, `delete()`以及`load()`和`get()`。 - **事务管理**:`Session`支持事务操作,通过`beginTransaction...