爪哇2博客
爪哇2博客

休眠多对多映射示例

这是教程系列的8部分中的5部分

教程内容:

在此示例中,我们将看到如何使用批注实现多对多关系。
让我们以国家和语言为例,一个国家可以有n种语言,一种语言可以由n个国家使用。以下是它们之间的关系图。

现在要在数据库中创建以上表格,您需要创建两个Java文件,即Country.java和Language.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
 
组织.Arpit.爪哇postsforlearning;
进口 爪哇.实用程序.数组列表;
进口 爪哇.实用程序.采集;
进口 爪哇x.坚持不懈.级联类型;
进口 爪哇x.坚持不懈.;
进口 爪哇x.坚持不懈.实体;
进口 爪哇x.坚持不懈.产生价值;
进口 爪哇x.坚持不懈.ID;
进口 爪哇x.坚持不懈.连接列;
进口 爪哇x.坚持不懈.联接表;
进口 爪哇x.坚持不懈.多对多;
进口 爪哇x.坚持不懈.;
 
@实体
@(名称=“国家”)
上市 国家 {
@ID
@产生价值
@(名称=“ 国家_Id”)
整型 国家Id;
@(名称=“国家的名字”)
     国家的名字 ;
@多对多(级联=级联类型.所有)
@联接表(名称=“ 国家_LANGUAGE”,joinColumns={@连接列(名称=“ 国家_Id”)},在verseJoinColumns={@连接列(名称=“ 语言_Id”)})
采集 语言= 数组列表();
    
上市 国家()
{
  
}
    上市 国家( 国家的名字) {
  这个.国家的名字=国家的名字;
}
 
上市 getCountryName() {
        返回 国家的名字;
    }
          
    上市 虚空 setCountryName( 国家的名字) {
        这个.国家的名字 = 国家的名字;
    }
 
上市 采集 getLanguages() {
  返回 语言;
}
 
上市 虚空 setLanguages(数组列表 语言) {
  这个.语言 = 语言;
}
}
 

@MamyToMany批注用于在Country和Language实体之间创建多对多关系。 @JoinTable批注用于创建COUNTRY_LANGUAGE链接表,而@JoinColumn批注用于引用两个表中的链接列。

2,Langauge.java

语言类将用于在数据库中创建LANGUAGE表。
创造 朗格 在 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
 
组织.Arpit.爪哇postsforlearning;进口 爪哇x.坚持不懈.;
进口 爪哇.实用程序.数组列表;
进口 爪哇.实用程序.采集;
进口 爪哇x.坚持不懈.;
进口 爪哇x.坚持不懈.实体;
进口 爪哇x.坚持不懈.产生价值;
进口 爪哇x.坚持不懈.ID;
进口 爪哇x.坚持不懈.多对多;
进口 爪哇x.坚持不懈.;
 
@实体
@(名称=“语言”)
上市 语言 {
 
@ID
@产生价值
@(名称=“ 语言_Id”)
整型 languageId;
@(名称=“语言名称”)
languageName;
@多对多(被映射=“语言”)
采集 languageSpeakingCountries= 数组列表();
 
上市 语言()
{
  
}
上市 语言( languageName) {
  这个.languageName=languageName;
}
 
上市 getLanguageName() {
  返回 languageName;
}
 
上市 虚空 setLanguageName( languageName) {
  这个.languageName = languageName;
}
 
上市 采集 getLanguageSpeakingCountries() {
  返回 languageSpeakingCountries;
}
 
上市 虚空 setLanguageSpeakingCountries(数组列表 languageSpeakingCountries) {
  这个.languageSpeakingCountries = languageSpeakingCountries;
}
}
 

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.Language”></映射>
 
    </会议->
 
</冬眠的-组态>
 

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
37
38
 
组织.Arpit.爪哇postsforlearning;
 
进口 组织.冬眠的.届会;
进口 组织.冬眠的.会话工厂;
进口 组织.冬眠的.CFG.组态;
进口 组织.冬眠的.服务.服务注册;
进口 组织.冬眠的.服务.服务注册Builder;
 
上市 休眠主 {
 
上市 静态的 虚空 主要([] args) {
  
  国家 国家= 国家(“印度”);
    
  语言 印度语= 语言(“印地语”);
  印度语.getLanguageSpeakingCountries().(国家);
  
  语言 英文= 语言(“英语”);
  英文.getLanguageSpeakingCountries().(国家);
  
  国家.getLanguages().(印度语);
  国家.getLanguages().(英文);
    
  组态 组态= 组态();
  组态.配置();
  服务注册 sr= 服务注册Builder().applySettings(组态.getProperties()).buildServiceRegistry();
  会话工厂 科幻=组态.buildSessionFactory(sr);
  届会 ss=科幻.openSession();
  
  ss.beginTransaction();
  ss.保存(国家);
  ss.getTransaction().承诺();
  ss.();
  
}
}
 

项目结构:

5,运行它

运行它时,您将获得以下输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
冬眠: 创造 国家 (国家_Id 整型 身份 空值, 国家的名字 varchar(255), (国家_Id))
冬眠: 创造 国家_LANGUAGE (国家的名字 整型 空值, 语言名称 整型 空值)
冬眠: 创造 语言 (语言_Id 整型 身份 空值, 语言名称 varchar(255), (语言_Id))
冬眠: 改变 国家_LANGUAGE 约束 FK67645601403CB4F4 国外 (语言名称) 参考资料 语言
冬眠: 改变 国家_LANGUAGE 约束 FK6764560165CEDD60 国外 (国家的名字) 参考资料 国家
二月 03, 2013 12:07:59 上午 组织.冬眠的.工具.hbm2ddl.模式导出 执行
信息: HHH000230: 架构图 出口 完成
冬眠: 进入 国家 (国家的名字) 价值观 (?)
冬眠: 进入 语言 (语言名称) 价值观 (?)
冬眠: 进入 语言 (语言名称) 价值观 (?)
冬眠: 进入 国家_LANGUAGE (国家的名字, 语言名称) 价值观 (?, ?)
冬眠: 进入 国家_LANGUAGE (国家的名字, 语言名称) 价值观 (?, ?)
 

5.SQL输出:

数据库中的COUNTRY表

数据库中的LANGUAGE表

创建COUNTRY_LANGUAGE表以链接上面的两个表。

源代码:

1
2
3
4
 
<b>资源:</b><a href="//dl.dropbox.com/s/770ug5wofbciekt/ManyToManyMappingExample.zip" 目标=“_空白”>下载 没有 罐子 档案</a>
<b>资源 + LIB</b>: <a href="//dl.dropbox.com/s/ydj8ijjbdwe8btm/ManyToManyMappingExampleWithJars.zip" 目标=“_空白”>下载 档案</a>
 

分享这个

作者

关注作者

相关文章

发表评论

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

订阅我们的新闻

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


成为朋友

©2020 爪哇2博客