实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取。在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义。

本文以java注解的形式总结映射关系配置。

实体类组件以及注解标签映射关系

实体类-----------@Entity/@Table----------数据表

Id--------------@Id----------主键

普通属性---------@Column----------普通键

集合属性---------@OneToMany/@ManyToOne/@ManyToMany/@OneToOne/@OneToMany----------外键

将映射文件配置到hibernate配置文件

Hibernate将通过配置文件(cfg.xml)定义实体和数据库关系映射

<mapping class="com.test.Cat"/>

主键映射

.Hibernate推荐实体类有主键列并且有setter 和 getter,且主键数据类型使用引用类型。因为,基础数据类型不能为null值,hibernate中主键的null表明实体类是处在瞬时(Transient)状态,非null表示处持久化()状态。

.用@Id声明为主键列,用@Column声明列名。

.列名属性名相同时候@Column可以省略。

.@GeneratedValue指定主键的生成策略

Example:

@Id

@Column(name = "id")

@GeneratedValue(strategy = GenerationType.AUTO)

private Integer id;

主键生成规则

目前@注解支持4种生成策略:

GenerationType.AUTO:根据数据库自己决定

GenerationType.TABLE:使用指定表决定主键的取值

GenerationType.SEQUENCE:使用sequence决定主键取值,适合支持sequence的数据库。

GenerationType.IDENTITY:identity类型的主键

普通属性配置

.java@注解使用@Column和@Basic配置普通属性。两者都可以省略

.@Column属性(声明字段约束)

Nullable非空约束

Unique   唯一约束

Insertable 插入约束(是否允许插入)

Updateable 更新约束(是否允许更新)

Length    列长度

ColumnDefinition 列类型

Scale     整数长度

Precision 小数点精度

@Basic属性(声明加载方式)

Fetch 是否延迟加载

Optional 该列是否可以为null

Example:

@Column(name = "salary", scale = 8, precision = 2)

@Basic(fetch = FetchType.LAZY, optional=true)

private double salary;

日期属性配置

日期属性也是普通属性

除了@column和@Basic之外还可得使用@Temporal配置日期类型

java.sql.Date/java.sql.Time/java.sql.Timestamp都是java.util.Date的子类。实体类中声明成java.util.Date就行了。Hibernate根据日期配置的具体类型操作数据库。

Example:

@Temporal(TemporalType.TIMESTAMP)

// 日期类型(DATE, TIME还是TIMESTEMP)

@Column(name = "createDate")

private Date createDate;

临时属性映射

临时属性是实体类中方便运算的成员,不参与数据库的映射。防止hibernate把它和数据库进行映射导致产生异常,使用@Transient标记。

可以配置在属性上也可以配置在对应的getter/setter方法上。

Example:

@Transient

Public setterTemp (String temp){

this.temp = temp;

}

版本属性映射

为了保证数据的准确性,程序必须保证只用一个线程同时访问数据。乐观锁和悲观锁是两种实现的方式。@Version是乐观锁的实现。版本列一般为数字列。

Example:

@Version

Private int id;

实体关系映射配置

见《Hibernate实体映射配置2(java@注解方式)》

Hibernate实体映射配置1(java@注解方式)相关推荐

  1. 角色和权限Hibernate实体映射配置

    角色实体 package cn.itcast.oa.domain;import java.util.HashSet; import java.util.Set;/*** 岗位* * @author t ...

  2. SSM框架笔记08:初探Spring——采用配置类与注解方式

      初探Spring--采用配置类与注解方式   在上一讲的项目基础上继续.   不仅采用注解方式,而且用配置类替换Spring配置文件.   1.将xml_annotation包里的两个接口和四个类 ...

  3. Dubbo(二):Dubbo 基础配置Xml、注解方式 和 高级特性

    Dubbo的基础配置 Xml方式 注解方式 Dubbo的基础配置使用 启动时检查 超时重连 集群容错 负载均衡配置 结果缓存 服务分组 多版本 只订阅/只注册 异步调用 事件通知 参数回调 本地伪装- ...

  4. java注解方式实体类_如何用注解的方式在实体类中实现一对一,和一对多多对多...

    一对一 @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "THEMEID") @Cascade({CascadeType. ...

  5. 【Hibernate】Hibernate实体映射——单边的一对多关系

    数据库中的表是有关系的,两个表之间可以通过外键关联.如果把表抽象为实体类,这些关系可以抽象为实体之间的一对一,一对多,多对一等关系.hibernate能处理这些复杂的关系,前提是要正确配置这些关系. ...

  6. java 注解方式_小知识~~javaSE注解(超详细)

    第一节 反射应用:完善DBUtil,提取select() 1.1 认识ResultSetMetaData 利用ResultSet的getMetaData的方法可以获得ResultSetMeta对象,而 ...

  7. SpringBoot集成websocket(java注解方式)

    第一种:SpringBoot官网提供了一种websocket的集成方式 第二种:javax.websocket中提供了元注解的方式 下面讲解简单的第二种 添加依赖 <dependency> ...

  8. Hibernate 实体映射类的状态值自动转换

    经常会遇到有些字段在数据库只是一个 byte 值,但是取出数据后需要转换为真实的状态名称. 举个栗子:一个图书管理系统,书籍有一个属性 stat(借出状态),在库中只需要保存一个 0/1/2/3/4 ...

  9. MyBatis 3(2)实体映射 CRUD 操作(XML/注解方式)

    MyBatis 实体映射 Mybatis 配置数据映射主要有 2 种方式,通过 XML 配置文件进行,通过注解进行: Mybatis 对于实体映射是通过接口调用的方式,在底层上使用 Java 的动态代 ...

最新文章

  1. 关于TableLayoutPanel里放入控件无法将Dock设为Fill的解决办法
  2. windows配置gitlab秘钥并测试_你了解多少Linux系统GitLab安装与环境配置?
  3. c++-内存管理-BC5
  4. python mock_Python中使用mock.Mock()进行mock测试
  5. [UE4]C++静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()
  6. Uber如何使用go语言创建高效的查询服务
  7. 【Python】PIL库介绍
  8. java 泛型 类型形参(Type Parameters) 类型
  9. dhcp协议_记录一次DHCP协议的学习过程
  10. 破解校园网锐捷无法开热点问题
  11. 无源三端口器件特性分析-《微波工程》
  12. php中wamp具体指的是,phpwamp和wampserver有什么关系,为什么名字都带wamp这几个字母,两者有区别吗?我应该用哪个?...
  13. cox回归模型python实现_Python用Cox比例风险模型进行生存分析-基于lifelines库
  14. ocr---训练自己的数据实现文本检测(kears实现east网络)
  15. oracle 11g duplicate database基于备份复制数据库(三)
  16. 记录一次重装win10系统后,没有1920*1080分辨率的问题
  17. 【千锋Python2205班9.29笔记-day09-字符串(一阶段)】
  18. frame/frameset/iframe的区别
  19. BT05蓝牙模块使用教程
  20. c语言串行通信论文参考文献,参考文献

热门文章

  1. java continue goto_Java中goto和break、continue实现区别
  2. linux版本fedora,技术|初级:如何更新 Fedora Linux 系统
  3. php处理上传文件的步骤,php文件上传步骤
  4. java enummap_Java EnumMap get()方法与示例
  5. ruby array_在Ruby中使用Array.pop和Array.shift方法从Array中删除元素
  6. aptitude_PHP Numbers Aptitude问题与解答
  7. 万字详解|手撕 9大排序算法!
  8. Python获取电脑硬件配置的封装类,可以获取CPU序列号、主板序列号、BIOS序列号、硬盘序列号和网卡MAC地址
  9. 2021-01-24
  10. 故障error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: “