休眠一对多映射示例
这是教程系列的8个部分中的4个
教程内容:
- 休眠框架简介
- Eclipse中的Hibernate Hello World示例
- openSession和getCurrentSession之间的区别
- 休眠一对一映射示例
- 休眠一对多映射示例
- 休眠多对多映射示例
- 冬眠继承:每个类层次结构的表
- 冬眠继承:每个子类表
- 冬眠继承:每个具体类的表
- openSession和getCurrentSession之间的区别
- 获取与加载之间的差异
- 春季MVC 冬眠 MySQL CRUD示例
- 弹簧 Rest休眠示例
在此示例中,我们将看到如何使用批注实现一对多关系。
让我们以国家和州为例,一个国家可以有n个州,以下是它们之间的关系图。
现在要在数据库中创建以上表格,您需要创建两个Java文件,即Country.java和State.java。
1.国家/地区
国家类别将用于在数据库中创建COUNTRY表。
创建Country.java 在 src->组织.arpit.javapostsforlearning.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
包 组织.Arpit.爪哇postsforlearning; 进口 爪哇.实用程序.数组列表; 进口 爪哇.实用程序.采集; 进口 爪哇x.坚持不懈.级联类型; 进口 爪哇x.坚持不懈.柱; 进口 爪哇x.坚持不懈.实体; 进口 爪哇x.坚持不懈.ID; 进口 爪哇x.坚持不懈.连接列; 进口 爪哇x.坚持不懈.联接表; 进口 爪哇x.坚持不懈.一对多; 进口 爪哇x.坚持不懈.表; @实体 @表(名称=“国家”) 上市 类 国家 { @ID @柱(名称=“国家的名字”) 串 国家的名字 ; @一对多(级联=级联类型.所有) @联接表(名称=“国家地区”,joinColumns={@连接列(名称=“国家的名字”)},在verseJoinColumns={@连接列(名称=“州名”)}) 采集 listOfStates=新 数组列表(); @柱(名称=“国家/地区人口”) 长 国家人口; 上市 国家() { } 上市 国家(串 国家的名字, 长 国家人口) { 这个.国家的名字 = 国家的名字; 这个.国家人口 = 国家人口; } 上市 长 getCountryPopulation() { 返回 国家人口; } 上市 虚空 setCountryPopulation(长 国家人口) { 这个.国家人口 = 国家人口; } 上市 串 getCountryName() { 返回 国家的名字; } 上市 虚空 setCountryName(串 国家的名字) { 这个.国家的名字 = 国家的名字; } 上市 采集 getListOfStates() { 返回 listOfStates; } 上市 虚空 setListOfStates(采集 listOfStates) { 这个.listOfStates = listOfStates; } } |
@OneToMany批注用于在Country和State实体之间创建一对多关系。 @JoinTable批注用于创建COUNTRY_STATE链接表,@ 连接列批注用于引用两个表中的链接列。
2.状态库
州类将用于在数据库中创建STATE表。
创造 州.java 在 src->组织.arpit.javapostsforlearning.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
包 组织.Arpit.爪哇postsforlearning;进口 爪哇x.坚持不懈.柱; 进口 爪哇x.坚持不懈.柱; 进口 爪哇x.坚持不懈.实体; 进口 爪哇x.坚持不懈.ID; 进口 爪哇x.坚持不懈.表; @实体 @表(名称=“州”) 上市 类 州 { @ID @柱(名称=“州名”) 私人的 串 stateName; @柱(名称=“国家人口”) 长 人口; 上市 州() { } 上市 州(串 stateName, 长 人口) { 超(); 这个.stateName = stateName; 这个.人口 = 人口; } 上市 串 getStateName() { 返回 stateName; } 上市 虚空 setStateName(串 stateName) { 这个.stateName = stateName; } 上市 长 getStatePopulation() { 返回 人口; } 上市 虚空 setStatePopulation(长 人口) { 这个.人口 = 人口; } } |
3.Hiberante.cfg.xml:
创建一个名为“hibernate.cfg.xml” 在 src folder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?XML文件 版='1.0' 编码方式='utf-8'?> <!DOCTYPE 冬眠的-组态 上市 “-//休眠/休眠配置DTD 3.0 // EN” "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <冬眠的-组态> <会议-厂> <!- 数据库 连接 设定 -> <属性 名称=“ 连接.driver_class”>com.微软.sqlserver.数据库.的SQLServerDriver</属性> <属性 名称=“ 连接.url”>数据库:sqlserver:// localhost:1433; 数据库 = UserInfo</property> <属性 名称=“ 连接.username”>SA </属性> <属性 名称=“ 连接.password”></属性> <!- JDBC 连接 池子 (利用 的 已建-在) -> <属性 名称=“ 连接.pool_size”>1</属性> <!- 的SQL 方言 -> <属性 名称=“方言”>组织.冬眠的.方言.的SQLServer2005方言</属性> <!- 启用 冬眠's 自动 会议 语境 管理 -> <属性 名称=“ current_session_context_class”>线</属性> <!- 禁用 的 第二-水平 快取 -> <属性 名称=“ 快取.provider_class”>组织.冬眠的.快取.NoCacheProvider</属性> <!- 回声 所有 被执行 的SQL 至 标准输出 -> <属性 名称=“ show_sql”>真正</属性> <!- 下降 和 回覆-创造 的 数据库 图式 上 启动 -> <属性 名称=“ hbm2ddl.auto”>创造</属性> <映射 类=“ 组织.arpit.javapostsforlearning.Country”></映射> <映射 类=“ 组织.arpit.javapostsforlearning.State”></映射> </会议-厂> </冬眠的-组态> |
4.主类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
包 组织.Arpit.爪哇postsforlearning; 进口 组织.冬眠的.届会; 进口 组织.冬眠的.会话工厂; 进口 组织.冬眠的.CFG.组态; 进口 组织.冬眠的.服务.服务注册; 进口 组织.冬眠的.服务.服务注册Builder; 上市 类 休眠主 { 上市 静态的 虚空 主要(串[] args) { 国家 countryIndia=新 国家(“印度”,50000000); 州 mpState=新 州(“中央邦”,1000000); 州 马哈拉施特拉邦=新 州(“马哈拉斯特拉”,2000000); countryIndia.getListOfStates().加(mpState); countryIndia.getListOfStates().加(马哈拉施特拉邦); 组态 组态=新 组态(); 组态.配置(); 服务注册 sr= 新 服务注册Builder().applySettings(组态.getProperties()).buildServiceRegistry(); 会话工厂 科幻=组态.buildSessionFactory(sr); 届会 ss=科幻.openSession(); ss.beginTransaction(); ss.保存(countryIndia); ss.getTransaction().承诺(); ss.关(); } } |
项目结构:
5,运行它
运行它时,您将获得以下输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
冬眠: 创造 表 国家 (国家的名字 varchar(255) 不 空值, 国家_Population 比金特, 主 键 (国家的名字)) 冬眠: 创造 表 国家地区 (国家的名字 varchar(255) 不 空值, 州名 varchar(255) 不 空值, 独特 (州名)) 冬眠: 创造 表 州 (州名 varchar(255) 不 空值, 国家人口 比金特, 主 键 (州名)) 冬眠: 改变 表 国家地区 加 约束 FKA1E1226881D857C0 国外 键 (州名) 参考资料 州 冬眠: 改变 表 国家地区 加 约束 FKA1E1226865CEDD60 国外 键 (国家的名字) 参考资料 国家 二月 02, 2013 10:26:07 下午 组织.冬眠的.工具.hbm2ddl.模式导出 执行 信息: HHH000230: 架构图 出口 完成 冬眠: 选择 州_.州名, 州_.国家人口 如 状态2_1_ 从 州 州_ 哪里 州_.州名=? 冬眠: 选择 州_.州名, 州_.国家人口 如 状态2_1_ 从 州 州_ 哪里 州_.州名=? 冬眠: 插 进入 国家 (国家_Population, 国家的名字) 价值观 (?, ?) 冬眠: 插 进入 州 (国家人口, 州名) 价值观 (?, ?) 冬眠: 插 进入 州 (国家人口, 州名) 价值观 (?, ?) 冬眠: 插 进入 国家地区 (国家的名字, 州名) 价值观 (?, ?) 冬眠: 插 进入 国家地区 (国家的名字, 州名) 价值观 (?, ?) |
发表评论