Hibernate及JPA 对象关系映射的简单映射策略

简单映射

近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场 热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink。Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架设计思想的基础上,制定了新的 JPA(Java Persistence API)规范,对现在乱象丛生的持久 化市场带来一个标准,大有统一持久化市场的气势。JPA 是通过 JDK5.0 注解或 XML 描述对象 - 关系表的映射关系,并将 运行期实体对象持久化到数据库中去。JPA 规范小组的领导人就是 Hibernate 的发明者 Gavin King,JPA 规范的制定过程 中大量参考了 Hibernate 的内容,所以如果一个对 Hibernate 很熟悉的人,使用起来 JPA 会是轻车熟路,驾轻就熟的, 并且会感觉到更简单一些,这主要得益于 JDK5 中引入的注解(annotation)。

下面就使用注解介绍一下 JPA 的使 用。

首先用个小例子介绍一下如何将一个单个 Java 类映射到数据库中。

清单 1. Employee 实体

@Entity
public class Employee implements Serializable {
   private static final long serialVersionUID = 1L;
   @Id
   private Long id;
   private String name;
   private int age;
   private String addree; 

  // Getters and Setters
}

如果没有 @javax.persistence.Entity 和 @javax.persistence.Id 这两个注解的话,它完全就是一个典型的 POJO 的 Java 类,现在加上这两个注解之后,就可以作为一个实体类与数据库中的表相对应。他在数据库中的对应的表为 :

图 1. Employee 表对应的 ER 图

映射规则:

1. 实体类必须用 @javax.persistence.Entity 进行注解;

2. 必须使用 @javax.persistence.Id 来注解一个主键;

3. 实体 类必须拥有一个 public 或者 protected 的无参构造函数,之外实体类还可以拥有其他的构造函数;

4. 实体类必 须是一个顶级类(top-level class)。一个枚举(enum)或者一个接口(interface)不能被注解为一个实体;

5. 实体类不能是 final 类型的,也不能有 final 类型的方法;

6. 如果实体类的一个实例需要用传值的方式调用(例 如,远程调用),则这个实体类必须实现(implements)java.io.Serializable 接口。

将一个 POJO 的 Java 类映 射成数据库中的表如此简单,这主要得益于 Java EE 5种引入的  Configuration by Exception 的理念,这个理念的核 心就是容器或者供应商提供一个缺省的规则,在这个规则下程序是可以正确运行的,如果开发人员有特殊的需求,需要改变 这个默认的规则,那么就是对默认规则来说就是一个异常(Exception)。

如上例所示:默认的映射规则就是数据库 表的名字和对应的 Java 类的名字相同,表中列的名字和 Java 类中相对应的字段的名字相同。

现在我们可以改变 这种默认的规则:

清单 2. 使用 @Table 和 @Column 注解修改映射规则

@Entity
@Table(name="Workers")
public class Employee implements Serializable {
   private static final long serialVersionUID = 1L;
   @Id
   @GeneratedValue
   private Long id;
   @Column(name="emp_name", length=30)
   private String name;
   @Column(name="emp_age", nullable=false)
   private int age;
   @Column(name="emp_address", nullable=false ,unique=true)
   private String addree; 

    // Getters and Setters 

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据库
, private
, serialversionuid
, 注解
, java实体类
, 注解实体类
, 实体映射报错
, hibernate 一对一注解
, 规则
, 注解hibernate基类jpa字段
, 一个
, 实体
, mybatis映射实体类
实体类对象
hibernate 对象映射、jpa hibernate、jpa和hibernate的区别、hibernate jpa 配置、spring jpa hibernate,以便于您获取更多的相关知识。

时间: 2024-11-19 01:03:45

Hibernate及JPA 对象关系映射的简单映射策略的相关文章

通过Hibernate实现JPA对象关系模型之继承映射策略

Single-table 策略:这是继承映射中的缺省策略,在不特别指明的情况下,系统默认就是采用这种映射策略进行映射的.这个策略的映射原则就是父类包括子类中新添加的属性全部映射到一张数据库表中,数据库表中有一个自动生成的字段用来存储区分不同的子类的信息. Joined-subclass 策略:这种映射策略中,继承关系中的每一个实体类,无论是具体类 (concrete entity) 或者抽象类 (abstract entity),数据库中都有一个单独的表与他对应.子实体对应的表中不含有从根实体继

Hibernate及JPA对象关系映射:关联关系映射策略

关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一.一对多和多对多几种 关系.细分起来他们又有单向和双向之分.下面我们逐一介绍一下. 单向 OneToOne 单向一对一是关联关系 映射中最简单的一种,简单地说就是可以从关联的一方去查询另一方,却不能反向查询.我们用下面的例子来举例说明,清 单 1 中的 Person 实体类和清单 2 中的 Address 类就是这种单向的一对一关系,我们可以查询一个 Person 的对应的 Address 的内容,但是我们却不能由一

Hibernate的核心对象关系映射

Hibernate的核心就是对象关系映射: 加载映射文件的两种方式: 第一种:<mapping resource="com/bie/lesson02/crud/po/employee.hbm.xml"/> 第二种://便于测试,会自动加载映射文件:employee.hbm.xml   private static SessionFactory sf;     static{         //加载主配置文件,并且创建session工厂       sf = new Con

Hibernate Core v4.0.0.Alpha3发布 对象关系映射框架

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是, Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任. Hibernate Core Version 4.0.0.Alpha3发行日志: Sub-task

Hibernate Core 4.0.0.Alpha1发布 Java语言对象关系映射解决方案

Hibernate是一种Java语言下的对象关系映射解决方案.它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有. 它的设计目标是将软件http://www.aliyun.com/zixun/aggregation/7155.html">开发人员从大量相同的数据持久层相关编程工作中解放出来.无论是从设计草案还是从一个遗留数据

ORM对象关系映射已成为炙手可热的技术

简单映射,是对象关系映射中最为简单的一种,也是最为基础的一种,学好简单映射是掌握继承映射,关联关系映射的前提所在. 近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink.Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架http://www.aliyun.com/zixun/aggregation/8511.ht

对象关系映射的作用

问题描述 对象关系映射的作用? 解决方案 解决方案二:自己看吧http://www.itisedu.com/phrase/200604231312115.html参考资料:http://www.itisedu.com/phrase/200604231312115.html解决方案三:(1)对象关系映射:ObjectRelationalMapping为了解决面象对象与关系数据存在的互不匹配的现象的技术.简单的说orm是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系

详解PHP的Laravel框架中Eloquent对象关系映射使用_php技巧

零.什么是 EloquentEloquent 是 Laravel 的 'ORM',即 'Object Relational Mapping',对象关系映射.ORM 的出现是为了帮我们把对数据库的操作变得更加地方便. Eloquent 让一个 'Model类' 对应一张数据库表,并且在底层封装了很多 'function',可以让 Model 类非常方便地调用. 来看一段如下代码: <?php class Article extends \Eloquent { protected $fillable

SQLObject 1.1.3发布 Python数据库对象关系映射

SQLObject是一个Python数据库对象关系映射.例如:一个库将在Python类中包裹你的数据库表.目前通过MySQLdb包支持MySQL,通过psycopg包支持PostgreSQL,SQLite,Firebird,MaxDB (SAP DB),MS SQL和Sybase.也支持Python 2.4版本. SQLObject 1.1.3版本修复了http://www.aliyun.com/zixun/aggregation/14171.html">Postgres中的bug. 范例