爪哇 2博客
 爪哇 2博客

冬眠继承:每个类层次结构的表

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

教程内容:

我们将看到如何在hibernate中实现继承。您可以通过3种方式在hibernate中实现继承。在本文中,我们将看到其中一种,即每个类层次结构一个表。

休眠中的继承:

爪哇 是面向对象的语言,继承是竞彩篮球分析的主要功能之一。关系模型可以实现“is a” 和 “has a”关系,但是休眠为我们提供了以不同方式实现类层次结构的方法。

每个类层次结构一张表:

假设我们具有以下类层次结构,我们将shape类作为基类,并且Rectangle和Circle从Shape类继承。

在每个类层次结构的一个表中,将为上述层次结构创建一个表。将创建具有以下结构的SHAPE表。

如您所见,仅创建了一个具有子类属性的表(SHAPE)。
根据上面的类图,我们将创建三个类:Shape.java,Rectangle.java和Circle.java

1.Shape.java

这是我们实体类层次结构的根类。
创造 形状 .java  在 sr c -> 组织 .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
 
组织 . Arpit . 爪哇 postsforlearning;
进口 爪哇 x .坚持不懈.;
进口 爪哇 x .坚持不懈.鉴别柱;
进口 爪哇 x .坚持不懈.鉴别值;
进口 爪哇 x .坚持不懈. 实体 ;
进口 爪哇 x .坚持不懈.产生价值;
进口 爪哇 x .坚持不懈. ID ;
进口 爪哇 x .坚持不懈.遗产;
进口 爪哇 x .坚持不懈.继承类型;
进口 爪哇 x .坚持不懈.;
进口 爪哇 x .坚持不懈.鉴别类型;
 
@ 实体
@( 名称 =“形状”)
@遗产(战略=继承类型.SINGLE_TABLE)
@鉴别柱
(
名称 =“歧视者”,
discriminatorType=鉴别类型.
)
@鉴别值(= “ S” )
上市 形状 {
 
@ ID
@产生价值
@( 名称 =“ 形状 _Id”)
整型 形状 ID ;
@( 名称 =“形状名称”)
形状 名称 ;
         上市 形状 ()
{
  
}
上市 形状 ( 形状 名称 )
{
   这个 . 形状 名称 = 形状 名称 ;
}
//获取器和设置器
}
 

形状 是我们的根类,因此一些注释需要与根类一起使用以实现继承。

@遗产:

为了在hiberante中实现继承,使用@Inheritance批注。该批注定义了要为实体类层次结构实现的继承策略。对于每个类层次结构的一个表,我们已使用Single_Table作为继承策略。此批注在根级别或子层次结构级别定义适用不同策略的地方。

@DiscriminatorColumn:

该注释用于定义Single_Table和连接策略的区分符列,用于区分不同的类实例,此注释在要应用不同策略的根级别或子层次结构级别定义。
如果未指定@DiscriminatorColumn注释,则hibernate将创建一个名为“DType”和DiscriminatorType将是字符串。

@DiscriminatorValue:

这个注解定义了该类的鉴别列中的值,只能应用于实体具体的类,例如,如果条目将是SHAPE表中的形状实例,则“s”如果未指定此注释且使用了Discriminator列,则将提供提供者特定的值;如果Discriminator类型为String,则鉴别符值将为实体名称。Discriminator值(如果未默认设置)在层次结构中的每个实体上指定。

2,Rectangle.java

这是我们的孩子班。
创造 长方形.java  在 sr c -> 组织 .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
 
组织 . Arpit . 爪哇 postsforlearning; 进口 爪哇 x .坚持不懈.;
进口 爪哇 x .坚持不懈.;
进口 爪哇 x .坚持不懈.鉴别值;
进口 爪哇 x .坚持不懈. 实体 ;
 
@ 实体
@鉴别值(= “ R” )
上市 长方形 延伸 形状 {
 
@( 名称 =“矩形长度”)
整型 长度 ;
@( 名称 =“矩形_宽度”)
整型 宽度 ;
//获取器和设置器
上市 长方形()
{
  
}
上市 长方形( 形状 名称 , 整型 长度 , 整型 宽度 )
{
  ( 形状 名称 );
   这个 . 长度 = 长度 ;
   这个 . 宽度 = 宽度 ;
}
//获取器和设置器
}
 

3,Circle.java

这是我们的第二个孩子班。
创造   .java   在 sr c -> 组织 .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
 
组织 . Arpit . 爪哇 postsforlearning; 进口 爪哇 x .坚持不懈.;
进口 爪哇 x .坚持不懈.;
进口 爪哇 x .坚持不懈.鉴别值;
进口 爪哇 x .坚持不懈. 实体 ;
 
@ 实体
@鉴别值(= “C” )
上市 延伸 形状 {
 
@( 名称 =“圆半径”)
整型 半径 ;
上市 ()
{
  
}
上市 ( 形状 名称 , 整型 半径 )
{
  ( 形状 名称 );
   这个 . 半径 = 半径 ;
  
}
//获取器和设置器
}
 

4,Hiberante.cfg.xml:

创建一个名为“hibernate.cfg.xml” 在   sr c  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
42
 
<? XML文件 ='1.0' 编码方式='utf-8'?>
<!DOCTYPE 冬眠的-组态 上市
        “-//休眠/休眠配置DTD 3.0 // EN”
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 
<冬眠的-组态>
 
    <会议->
 
        <! - 数据库 连接 设定 - >
        <属性 名称 =“ 连接.driver_class”> com .微软.sqlserver. 数据库 . 的SQL ServerDriver</属性>
        <属性 名称 =“ 连接.url”> 数据库 :sqlserver:// localhost:1433; 数据库 = UserInfo</property>
        <属性 名称 =“ 连接.username”> SA </属性>
        <属性 名称 =“ 连接.password”></属性>
 
        <! - JDBC 连接 池子 ( 利用 已建 -) - >
        <属性 名称 =“ 连接.pool_size”>1</属性>
 
        <! - 的SQL 方言 - >
        <属性 名称 =“方言”> 组织 .冬眠的.方言. 的SQL Server2005方言</属性>
 
        <! - 启用 冬眠's 自动 会议 语境 管理 - >
        <属性 名称 =“ current_session_context_class”> 线 </属性>
 
        <! - 禁用 第二 - 水平 快取    - >
        <属性 名称 =“ 快取 .provider_class”> 组织 .冬眠的. 快取 .NoCacheProvider</属性>
 
        <! - 回声 所有 d 的SQL 标准输出 - >
        <属性 名称 =“ show_sql”> 真正 </属性>
 
        <! - 下降 回覆 - 创造 数据库 图式 启动 - >
        <属性 名称 =“ hbm2ddl.auto”> 创造 </属性>
 
  <映射 =“ 组织 .arpit.javapostsforlearning.Shape”></映射>
  <映射 =“ 组织 .arpit.javapostsforlearning.Rectangle”></映射>
  <映射 =“ 组织 .arpit.javapostsforlearning.Circle”></映射>
 
    </会议->
 
</冬眠的-组态>
 

5,主类

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
 
组织 . Arpit . 爪哇 postsforlearning;
 
进口 组织 .冬眠的.届会;
进口 组织 .冬眠的.会话工厂;
进口 组织 .冬眠的. CFG .组态;
进口 组织 .冬眠的.服务.服务注册;
进口 组织 .冬眠的.服务.服务注册Builder;
 
上市 休眠主 {
 
上市 静态的 虚空 主要 ([] args ) {
  
   形状 形状 = 形状 (“ Sqaure”);
  长方形 长方形= 长方形(“长方形”, 10, 20);  
  = (“圈”, 4);
    
  组态 组态= 组态();
  组态.配置();
  服务注册 sr = 服务注册Builder().applySettings(组态.getProperties()).buildServiceRegistry();
  会话工厂 科幻 =组态.buildSessionFactory( sr );
  届会 ss = 科幻 .openSession();
  
   ss .beginTransaction();
   ss . 保存 ( 形状 );
   ss . 保存 (长方形);
   ss . 保存 ();
   ss .getTransaction(). 承诺 ();
   ss .();
  
}
}
 

项目结构:

6,运行它

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

1
2
3
4
5
6
7
8
 
冬眠: 创造 形状 (鉴别器 varchar (31) 空值 , 形状 _Id 整型 身份 空值 , 形状名称 varchar (255), 矩形宽度 整型 , 矩形长度 整型 , 圆半径 整型 , ( 形状 _Id))
二月 04, 2013 11:01:36 下午 组织 .冬眠的. 工具 .hbm2ddl.模式导出 执行
信息 : HHH000230: 架构图 出口 完成
冬眠: 进入 形状 (形状名称, 鉴别器) 价值观 (?, 'S' )
冬眠: 进入 形状 (形状名称, 矩形宽度, 矩形长度, 鉴别器) 价值观 (?, ?, ?, 'R' )
冬眠: 进入 形状 (形状名称, 圆半径, 鉴别器) 价值观 (?, ?, 'C' )
 

7,SQL输出

数据库中的SHAPE表。

分享这个

作者

关注作者

相关文章

发表评论

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

订阅我们的新闻

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


成为朋友

©2020 爪哇 2博客