Hibernate用户手册:2.1 领域模型以及映射类型

来源:互联网 发布:哪个网络播放器最好用 编辑:程序博客网 时间:2024/06/06 08:32

旨在交流学习,不对的地方请指正

domain model

术语domain model源自数据建模的领域。它是一个模型,最终描述了我们处理的问题领域。有时你也会听到术语:持久化类(persistent classes)。

最终,在一个ORM中,应用程序的领域模型是中心角色。他们组成你想要映射的classes。如果这些类遵循了Plain Old Java Object (POJO) 或者 JavaBean 编程模型,hibernate会工作的很好。然而,这些都不是硬性要求。的确,对于持久化类的性质,hibernate做了很少的假设。你可以通过其他的方式表达一个领域模型(比如说,使用java.util.Map的trees)。

以前使用hibernate的程序都会使用特有的XML映射文件格式来达到这个目的。随着JPA的到来,现在绝大多数的这些信息都使用了一种方式来定义,就是方便地通过ORM/JPA 供应器使用annotations(and/or standardized XML format)。这个章节将尽可能地介绍 JPA 映射。对于JPA 不支持的hibernate映射功能,我们将会在Hibernate extension annotations中介绍。

Mapping Types

Hibernate 理解 Java 和 JDBC 程序数据的表现。一个Hibernate type 都能从数据库中读取或写入数据。一个 type 的这种用法是 the org.hibernate.type.Type 接口的一个实现。这个 Hibarnate type 也描述了这个 java type 的行为的各个方面,比方说:如何检查相等,如何克隆值,等等。

附注:type 的用法

Hibernate type 既不是java类型,也不是 SQL 数据类型。它提供了关于两者的信息,并且清楚两者之间的关联。
当你在 Hibernate 的讨论中遇到术语 type 时,它可能指 Java type、JDBC type、或者 Hibernate type,这取决于上下文。
为了帮助理解type的分类,看下面的例子:一个简单的表和它的领域模型

create table Contact (    id integer not null,    first varchar(255),    last varchar(255),    middle varchar(255),    notes varchar(255),    starred boolean not null,    website varchar(255),    primary key (id))
@Entity(name = "Contact")public static class Contact {    @Id    private Integer id;    private Name name;    private String notes;    private URL website;    private boolean starred;    //Getters and setters are omitted for brevity}@Embeddablepublic class Name {    private String first;    private String middle;    private String last;    // getters and setters omitted}

大体上来讲,Hibernate 类型分为两类:

  • Value types
  • Entity types

Value types

一个值类型是数据一小块,它不能定义自己的生命周期。实际上,它属于一个entity,entity明确了它的生命周期。

看看另一种方式,一个entity所有的状态完全由value types组成。这个状态字段或者JavaBean属性都被称为持久化属性(persistent attributes)。这些通讯类(contact classes )的持久化属性都是value types。

value types 可以进一步分为三种子类型:

  • Basic types 基本类型
    在映射Contact 表中,所有的属性,除了name,都是基本类型。基本类型将会在Basic Types 章节中详细讨论。

  • Embeddable types 嵌入式类型
    name属性就是嵌入式类型的一个例子,这将会在Embeddable Types章节中讨论。

  • Collection types 集合类型
    尽管在上述例子中没有涉及到,collection types 在value types 中也是一个独特的种类。Collections types 会在 Collections 章节中讨论。

Entity types

entities,从他们唯一标识符特质来看,都独立于其他对象存在,但是value types 就不同。entities 是领域模型classes,通过一个唯一的标识符(主键)关联到一个数据库中的表的行。因为对于一个唯一标识符的需求,entities独立存在,并明确他们自己的生命周期。Cantact类自身就是一个entity的例子。

0 0
原创粉丝点击