【Hibernate框架开发之四】Annotation注解归总&ID生成策略&联合主键-阿里云开发者社区

开发者社区> 余二五> 正文

【Hibernate框架开发之四】Annotation注解归总&ID生成策略&联合主键

简介:
+关注继续查看

这篇主要讲解Hibernate中Annotation的常用注解和ID的生成策略以及联合主键三块;

    首先介绍些常用的Annotation注解:

1.  当表名与类名不一致:

@Table(name="数据库表名")        (javax.persistence)      如果类名与表名相同可以不用写

2.  当字段名与属性不同:

@Column(name="_name")       ,相同的话使用@Basic ,@Base 默认可以不写;

3.  设置属性不参与持久化到数据库中:

@Transient

4.  映射时期与时间类型,指定时间精度:

属性一般使用 java.util.data,而不是sql.data!默认数据库则使用 datetime  类型存储属性data;

不设定精度,数据库默认日期和时间都保存!

Annotation中的名字为value=xx,value 可以省略不写

只想保存日期:(数据库字段类型对应  data)

@Temporal(value=TemporalType.DATE)            @Temporal(value=TemporalType.DATE)

只想保存时间:(数据库字段类型对应  time)

@Temporal(value=TemporalType.TIME)             @Temporal(TemporalType.TIME)

5. 映射枚举类型:

@Enumerated

如果你需要定义枚举类型,那么这样:

@Enumerated(EnumType.STRING)     字符串枚举类型

@Enumerated(EnumType.ORDINAL)      数序(数字)枚举类型(数据库存枚举的下标)

另外一块:字段映射位置放置在getXXX方法上,和放置在成员变量上都可以,但是建议放置getXXX方法上,因为我们的成员变量都是设置private,如果你映射位置放置在成员变量上,那将让Hibernate直接访问我们的私有变量,既然设置私有没必要希望Hibernate直接访问,破坏Java的封装性。

 

下面介绍Annotation中ID生成策略:

1. 手动指定;没说的之前写过,xml和属性都使用过;@Id

2.  使用 Generator 生成器;

Generator 有很多值:常用的有native , identity, sequence,uuid(id类型 String) ;

使用Generarot帮我们自动生成ID:

@GeneratedValue

注视在 @Id下:

@Id

@GeneratedValue

默认策略 auto/native ;如果你使用MySQL,那么自动使用 auto_increment

指定ID生成策略  @GeneratedValue

@GeneratedValue(strategy=GenerationType.AUTO) @GeneratedValue(strategy=GenerationType.IDENTITY) @GeneratedValue(strategy=GenerationType.SEQUENCE) @GeneratedValue(strategy=GenerationType.TABLE)

这里要注意要使用数据库支持的,比如这里MySQL我们使用IDENTITY ;

GenerationType.TABLE  主要用于跨数据库平台,很少用,标记下;

 

最后一块:联合主键

在使用Annotation使用联合主键有三种方式:

1.  将你的多个Primary Key放置一个新类中(主键类),并且用注解@Embeddable 声明主键类即可;实体类使用注解@Id指向主键类

2.  将你的多个Primary Key放置一个新类中(主键类),实体类使用注解@EmbeddedId指向主键类即可;

3. 实体类中在所有需要设置为主键的属性上都加入@Id注解,然后在注解实体类下面添加一个如下注解:

@IdClass(value=XXX.class)    这里的XXX对应你的主键类名

3种之中最适合的书写习惯的是第3种,但是第二种比较方便,也很常用;

但是不管哪一种使用方法,对于使用联合主键而言,你的主键类都需要使用Serializable接口,并且重写equals和hashCode函数;

      Serializable接口 原因是:序列化就是为了能暂存一些对象到硬盘中;

     重写equals函数 , 原因是:内存中的对象区分;

     重写hashCode  函数, 原因是:根据哈希码快速索引;





本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/969782,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Hibernate之:各种主键生成策略与配置详解
1、assigned 主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免。
901 0
【hibernate】 hibernate的主键策略
今天使用maven生成一个sping+springMVC+hibernate 的项目,报错如下:   错误提示呢:不能解释这个id的生成策略【uuid.string】。就是uuid.string这个hibernate不支持。
751 0
巧用JSON.stringify()生成漂亮格式的JSON字符串
巧用JSON.stringify()生成漂亮格式的JSON字符串 使用JavaScript处理XML基本上就是一个杯具,这也是JSON在程序开发中广受欢迎的原因。我曾经写过一个 JavaScript函数来将XML转换为JSON,那种~duang~duang~的痛点简直是折腾得你欲死欲仙。
771 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载