【大话Hibernate】Hibernate两种实体关系映射详解

本文详细介绍了Hibernate中实体类与数据库的映射关系配置,包括@注解和XML文件两种方式。内容涵盖实体类映射、主键生成规则、普通属性、日期属性和临时属性的映射,以及乐观锁的悲观锁和乐观锁机制。重点讲解了@注解和XML配置的主键、普通属性和日期属性的映射方法。
摘要由CSDN通过智能技术生成

 

实体类与数据库之间存在某种映射关系,Hibernate依据这种映射关系完成数据的存取,因此映射关系的配置在Hibernate中是最关键的。Hibernate支持xml配置文件与@注解配置两种方式。xml配置文件是最基础的配置,而@注解是Java的官方JPA(Java Persistence API)提供的。本章分别使用@注解与xml讲解Hibernate的映射配置。


一、实体类映射:

 

Java的角度讲,实体类就是普通的Java封装类(有人称为POJO有人称为VO)。仅从实体类中的代码信息,Hibernate并不能得知该实体类对应哪个数据表,因此还需要以某种方式配置一下。常用的方式有*.hbm.xml文件配置与@注解配置两种。

hbm.xml文件就是普通的xml文件,hbmHibernateMapping的缩写,这样从文件名上就能判断该文件为Hibernate实体类配置文件。在JPA出现之前,Hibernate都使用hbm.xml文件配置。JPA出现后,推荐使用JPA@注解配置,因为对于所有的ORM框架,@注解都是通用的。

 

1、@注解配置:

实体类一般有ID、普通属性、集合属性等,分别对应数据库的主键、普通列、外键。在@注解配置中,实体类用@Entity注解,用@Table指定对应的数据表,用@Id配置主键,用@Column配置普通属性,用@OneToMany、@ManyToOne、@OneToOne、@ManyToMany配置是实体间的关系。

 

2XML配置:

多个实体类可以配置在一个XML文件中。Hibernate推荐用一个同名的XML文件配置一个实体类,便于阅读和维护。XML文件一般以“*.hbm.xml”结尾,便于辨认,也可以直接使用“*.xml”结尾。

实体类还需要配置到hibernate.cfg.xml中,以便hibernate初始化实体类与数据库表的映射关系。如果只配置了映射关系,而没有配置到hibernate.cfg.xml中,hibernate仍然不会知道哪些类是实体类,因为hibernate无法通过遍历所有的类来决定哪些是实体类。如果实体类是用@注解配置的,需要用<mappingclass=”” />配置,而如果是用XML文件配置的,则需要使用<mappingresource=”” />配置XML配置文件。

 

 

二、主键映射:


实体类最好有主键列,并有对应的gettersetter方法,这是hibernate推荐的。逐渐尽量使用可以为null值的类型,例如IntegerLongString等,而不要使用intlong等。因为如果主键为null,则表示该实体类还没保存到数据库,是一个临时状态(Transient),而intlong等原始类型则不具备该功能。


1@注解配置主键

       Hibernate中用@Id声明该列为主键列,同时用@Column声明该列的列名。当列名与属性名相同时,@Column配置可省略。@GeneratedValue用于指定主键的生成策略。Hibernate支持多种逐渐生成规则,例如自增长、由某个表决定、由Sequence决定等等。如果不配置

 

@GeneratedValue,则必须手动设置ID值。
@Id
@Column(name = "id")
// 设置主键类型, auto表示主键是自增长类型
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;


 

2.  XML文件中配置主键


如果使用XML配置,主键用<id />配置,name指定实体类的主键属性,column指定数据表中的主键列名。使用嵌套的<generator />配置主键生成策略,native表示使用数据库自己的策略,在MySQL中就是自增长类型,如果不用自动增长类型,则可以用assigned,例如:

 

<id name="id" column="id">
<generator class="native" />
</id>


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值