【HIBERNATE框架开发之四】HIBERNATE-ANNOTATION常用的注解归总&&ID的生成策略&&联合主键

简介:
本站文章均为  李华明Himi 原创,转载务必在明显处注明: 
转载自【黑米GameDev街区】 原文链接:  http://www.himigame.com/hibernate/811.html

这篇主要讲解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  函数, 原因是:根据哈希码快速索引;


相关文章
|
3月前
|
缓存 NoSQL Java
揭秘性能提升的超级武器:掌握Hibernate二级缓存策略!
【9月更文挑战第3天】在软件开发中,性能优化至关重要。使用Hibernate进行数据持久化的应用可通过二级缓存提升数据访问速度。一级缓存随Session生命周期变化,而二级缓存是SessionFactory级别的全局缓存,能显著减少数据库访问次数,提高性能。要启用二级缓存,需在映射文件或实体类上添加相应配置。然而,并非所有场景都适合使用二级缓存,需根据业务需求和数据变更频率决定。此外,还可与EhCache、Redis等第三方缓存集成,进一步增强缓存效果。合理运用二级缓存策略,有助于大幅提升应用性能。
93 5
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
96 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
4月前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
48 0
|
4月前
|
缓存 Java 数据库连接
Hibernate 中的获取策略有哪些?
【8月更文挑战第21天】
23 0
|
5月前
|
SQL 缓存 Java
使用Hibernate实现复杂数据库查询优化策略
使用Hibernate实现复杂数据库查询优化策略
|
6月前
|
JSON Java 数据库连接
Hibernate中使用@Lob 注解保存String[] 问题
Hibernate中使用@Lob 注解保存String[] 问题
35 2
|
5月前
|
SQL 缓存 Java
使用Hibernate实现复杂数据库查询优化策略
使用Hibernate实现复杂数据库查询优化策略
|
6月前
|
缓存 Java 数据库连接
构建高效数据库交互:Hibernate与JPA的性能优化策略
【6月更文挑战第25天】在大数据时代,优化Hibernate和JPA的数据库性能至关重要。本文探讨了优化策略:正确配置映射以减少冗余,利用JPQL/HQL提升查询效率,避免全字段选择,使用索引和分页,有效利用缓存策略,以及管理事务以平衡资源锁定。示例代码展示了分页查询的实现,以防止性能下降。
127 0
|
7月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
1月前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
18 1