Hibernate5-多对一双向关联-fetch=select,lazy=proxy,在一的一方的class标签中添加
1.创建项目,项目名称hibernatedemo28,目录结构如图所示
2.在项目中创建lib目录存储jar文件,目录结构如图所示
3.在src目录中创建实体类Forum,包名(com.mycompany.demo.bean),如图所示
4.实体类Forum的内容如下
package com.mycompany.demo.bean;import java.util.Set;public class Forum {private int fid;private String name;private Set<ForumPost> forumPosts;public int getFid() {return fid;}public void setFid(int fid) {this.fid = fid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<ForumPost> getForumPosts() {return forumPosts;}public void setForumPosts(Set<ForumPost> forumPosts) {this.forumPosts = forumPosts;} }
5.在src目录中创建实体类Forum的映射文件Forum.hbm.xml,包名(com.mycompany.demo.bean),如图所示
6.映射文件Forum.hbm.xml的内容如下
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!--package:指定<class/>所在的包 --> <hibernate-mapping package="com.mycompany.demo.bean"><!--name:类名table:表名 catalog:数据库名称,默认为hibernate.cfg.xml中配置的数据库名称--><class name="Forum" table="forum" lazy="false"><meta attribute="class-description">This class contains the forum detail. </meta><!--name:属性名colum:列名 --><id name="fid" type="int" column="fid"><!--increment:hibernate维护主键值identity:数据库自增长sequence:序列native:根据不同的数据库选择生成策略uuid:通过UUID算法生成,实际使用较多assigned:手工设置--><generator class="native"/></id><!--length:字节长度type:字段类型,支持java和hibernate类型not-null:非空约束unique:唯一性约束--><property name="name" column="name" /><!--lazy:false:直接加载true:延迟加载extra:特别延迟加载fetchjoin:迫切左外连接select:普通select查询subselect :子查询方式--><set name="forumPosts"><key column="fid"/><one-to-many class="ForumPost"/></set></class> </hibernate-mapping>
7.在src目录中创建实体类ForumPost,包名(com.mycompany.demo.bean),如图所示
8.实体类ForumPost的内容如下
package com.mycompany.demo.bean;public class ForumPost {private int pid;private String subject;private Forum forum;public int getPid() {return pid;}public void setPid(int pid) {this.pid = pid;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public Forum getForum() {return forum;}public void setForum(Forum forum) {this.forum = forum;} }
9.在src目录中创建实体类ForumPost的映射文件ForumPost.hbm.xml,包名(com.mycompany.demo.bean),如图所示
10.映射文件ForumPost.hbm.xml的内容如下
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!--package:指定<class/>所在的包 --> <hibernate-mapping package="com.mycompany.demo.bean"><!--name:类名table:表名 catalog:数据库名称,默认为hibernate.cfg.xml中配置的数据库名称--><class name="ForumPost" table="forumpost"><meta attribute="class-description">This class contains the forumpost detail. </meta><!--name:属性名colum:列名 --><id name="pid" type="int" column="pid"><!--increment:hibernate维护主键值identity:数据库自增长sequence:序列native:根据不同的数据库选择生成策略uuid:通过UUID算法生成,实际使用较多assigned:手工设置--><generator class="native"/></id><!--length:字节长度type:字段类型,支持java和hibernate类型not-null:非空约束unique:唯一性约束--><property name="subject" column="subject" type="string" length="50" not-null="true" unique="false"/><!--name:关联属性 column:关联属性在数据库对应的字段class:关联属性所对应的类型--><many-to-one name="forum" class="Forum" column="fid" cascade="save-update" fetch="select" lazy="proxy"/></class><query name="queryAll">from Forum f left outer join fetch f.forumPosts</query> </hibernate-mapping>
11.在src目录中创建工具类 HbnUtil,包名(com.mycompany.demo.util),如图所示
12.工具类 HbnUtil的内容如下
package com.mycompany.demo.util;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;public class HbnUtil {private static SessionFactory sessionFactory;public static Session getSession(){if(sessionFactory == null || sessionFactory.isClosed()){sessionFactory = new Configuration().configure().buildSessionFactory();}return sessionFactory.getCurrentSession();} }
13.在src目录中创建Hibernate的配置文件hibernate.cfg.xml,如图所示
14.Hibernate的配置文件hibernate.cfg.xml的内容如下
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 方言,可以从Hibernate核心jar(hibernate-core-x.x.x.Finall.jar)文件中的or.hibernate.dialect包中找到相应的类,类的全名就是 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 驱动 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- 数据库连接地址 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property><!-- 用户名 --><property name="hibernate.connection.username">root</property><!-- 密码 --><property name="hibernate.connection.password"></property><!--create:每次都新创建,如果存在就删除create-drop:创建新表,sessionFactory关闭,表会删除update :表字段增加,会同步,字段减少不同步,数据改变会同步修改--><property name="hibernate.hbm2ddl.auto">update</property><!-- 输出sql --><property name="hibernate.show_sql">true</property><!-- 格式化sql --><property name="hibernate.format_sql">true</property><!-- 事务环境一个线程对一个事务thread:本地事务环境jta:分布式事务环境SpringSessionContext:用于ssh整合--><property name="hibernate.current_session_context_class">thread</property> <!-- 使用c3p0数据源 --><property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property> <!-- List of XML mapping files --><mapping resource="com/mycompany/demo/bean/Forum.hbm.xml"/><mapping resource="com/mycompany/demo/bean/ForumPost.hbm.xml"/> </session-factory> </hibernate-configuration>
15.在项目中创建test目录存储测试文件,文件名称TestApp,包名(com.mycompany.demo.bean),目录结构如图所示
16.TestApp测试类的内容如下
package com.mycompany.demo.bean;import java.util.HashSet; import java.util.List; import java.util.Set;import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.sql.JoinType; import org.junit.Before; import org.junit.Test;import com.mycompany.demo.util.HbnUtil;public class TestApp {private Session session;@Beforepublic void init(){session = HbnUtil.getSession();}/** 一对多双向关联-添加* 需要设置Forum.hbm.xml中的Set属性为cascade="all"*/@Testpublic void testOneToManyAdd(){try {session.beginTransaction();ForumPost forumPost1 = new ForumPost();forumPost1.setSubject("A");ForumPost forumPost2 = new ForumPost();forumPost2.setSubject("B");Set<ForumPost> forumPosts = new HashSet<ForumPost>();forumPosts.add(forumPost1);forumPosts.add(forumPost2);Forum forum = new Forum();forum.setName("foruma");forum.setForumPosts(forumPosts);session.save(forum);session.getTransaction().commit();} catch (Exception e) {session.getTransaction().rollback();e.printStackTrace();}}/** 多对一双向关联-fetch="select",lazy="proxy",在一的一方的class标签中添加lazy="false"属性*/@Testpublic void testFetchForSelect(){try {session.beginTransaction();ForumPost forumPost = session.get(ForumPost.class, 10);Forum forum = forumPost.getForum();System.out.println(forum.getFid());System.out.println(forum.getName());session.getTransaction().commit();} catch (Exception e) {session.getTransaction().rollback();e.printStackTrace();}} }
本文转自 素颜猪 51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1913088
Hibernate5-多对一双向关联-fetch=select,lazy=proxy,在一的一方的class标签中添加相关推荐
- myeclipse试用小记----Hibernate多对一双向关联(2)
myeclipse试用小记----Hibernate多对一双向关联(2) 在上篇文章"myeclipse试用小记----Hibernate多对一单向关联(1)"中,讲到了" ...
- myeclipse hbm2java_myeclipse试用小记----Hibernate多对一双向关联(2)
myeclipse试用小记----Hibernate多对一双向关联(2) 在上篇文章"myeclipse试用小记----Hibernate多对一单向关联(1)"中,讲到了" ...
- [置顶] Hibernate从入门到精通(十一)多对多双向关联映射
上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...
- Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...
2018-11-10 22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...
- Hibernate多对多双向关联需要注意的问题(实例说话)
以Student和Course为例,一个学生可以选多门课程,一门课程也可以被多个学生选取: 持久化类Student: [java] view plain copy package bean; impo ...
- JPA规范:一对多、一对一、多对多的双向关联与级联操作以及JPA联合主键
通常在企业开发中,开发Dao层有两种做法: (1)先建表,后再根据表来编写配置文件和实体bean.使用这种方案的开发人员受到了传统数据库建模的影响. (2)先编写配置文件和实体bean,然后再生成 ...
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
在我们以前的数据库设计中,设计表就不是一件轻松的事情.多种事物之间往往都是有这样那样的关系的.那怎样设计表格,才能既将事情描述明白,又能使数据库设计的比较合理呢?那里我们提供了好多规范,好多约束来满足 ...
- jpa级联添加_JPA中的一对多双向关联与级联操作
学习Spring有两周时间了 , 个人觉得服务端主要实现的是数据关系的维护和数据结构的制定 , 以及由业务需求产生的CRUD , 只要保证对前端提供的接口稳定高效响应 , 具体的前端实现完全不关心. ...
- [置顶] Hibernate从入门到精通(十)多对多单向关联映射
上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...
最新文章
- zookeeper: zkServer.sh status没有到主机的路由
- Linux headtail命令
- 服务器输入字符在客户端显示,管理 Unicode 服务器与非 Unicode 客户端之间的数据转换...
- 乘法运算-快速傅里叶变换
- vue 日期选择器默认时间_vue-datepicker
- 【工具】sysbench 0.5 简介
- java.util.zip.ZipException:invalid distance distance too far back
- 微服务面试题 - Spring Cloud
- word文档在线预览解决方案
- 数据库及对应数据文件使用查询
- java实验室管理系统报告_基于JAVA的实验室信息管理系统设计与实现
- 计算机平面设计是什么学的什么,计算机平面设计主要学什么?
- 给罗永浩和王自如打个分
- 一片外文的计算机网络方面的文献,计算机网络专科外文文献 计算机网络专科核心期刊参考文献有哪些...
- javascript开发简易画板
- mysql的组内排序生成序号_sql 分组查询,组内排序, 组内添加序号 (SQL Server 排序函数 ROW_NUMBER和RANK 用法总结)...
- class torch.optim.lr_scheduler.StepLR
- Linux(CentOS 7)、Windows双系统安装图文教程(超详细)适合初学者
- html中如何调整图片的对比色,最好的在线配色器 网页配色 在线配色
- 树莓派4B体验UbuntuDesktop20.10——优化篇