爪哇2博客
爪哇2博客

休眠一对多映射示例

这是教程系列的8个部分中的4个

教程内容:

在此示例中,我们将看到如何使用批注实现一对多关系。
让我们以国家和州为例,一个国家可以有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) {
  
  国家 countryIndi​​a= 国家(“印度”,50000000);
  
  mpState= (“中央邦”,1000000);
  马哈拉施特拉邦= (“马哈拉斯特拉”,2000000);
  
  countryIndi​​a.getListOfStates().(mpState);
  countryIndi​​a.getListOfStates().(马哈拉施特拉邦);
    
  组态 组态= 组态();
  组态.配置();
  服务注册 sr= 服务注册Builder().applySettings(组态.getProperties()).buildServiceRegistry();
  会话工厂 科幻=组态.buildSessionFactory(sr);
  届会 ss=科幻.openSession();
  
  ss.beginTransaction();
  ss.保存(countryIndi​​a);
  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, 国家的名字) 价值观 (?, ?)
冬眠: 进入 (国家人口, 州名) 价值观 (?, ?)
冬眠: 进入 (国家人口, 州名) 价值观 (?, ?)
冬眠: 进入 国家地区 (国家的名字, 州名) 价值观 (?, ?)
冬眠: 进入 国家地区 (国家的名字, 州名) 价值观 (?, ?)
 

6.SQL输出:

数据库中的COUNTRY表

数据库中的STATE表

创建COUNTRY_STATE表来链接上面的两个表。

源代码:

1
2
3
4
 
<b>资源:</b><a href="//dl.dropbox.com/s/m1udlhoxee8d3s7/OneToManyMappingExample.zip" 目标=“_空白”>下载 没有 罐子 档案</a>
<b>资源 + LIB</b>: <a href="//dl.dropbox.com/s/657mja4n3ue7qy9/OneToManyMappingExampleWithJars.zip" 目标=“_空白”>下载 档案</a>
 

分享这个

作者

关注作者

相关文章

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


成为朋友

©2020 爪哇2博客