实体映射基础

一个普通的POJO类通过标注@Entity可以映射成为可持久化的类,可持久化的类可以对应数据库中的数据。映射成为实体类要依赖一些特定的规则。

1、映射实体 (@Entity)
标注为@Entity注释的类,表示该类是一个可持久化的类,当在容器中时,服务器将会首先加载所有标注了@Entity注释的实体类,例如:

?


1

2

3

4

5

6

@Entity

public class ContaceEO {

   ...

   ContactEO() {...}

   ...

}

@Entity注释的定义的属性如下:

?


1

2

3

4

@Target(TYPE) @Retention(RUNTIME)

public @interface Entity {

  String name() default "";

}

其中name属性表示实体的名字,若不作设置,默认为标注实体类的名称。
注:标注为@Entity的实体类至少要有一个无参的构造方法。

2、标注主键(@Id)
用于标注实体类中关联数据库的主键

3、映射表(@Table)、映射方法和属性(@Column)
如下表结构:

?


1

2

3

4

create table contact (

  id int(20) not null,

  name varchar(50) default null,

)

实体类代码改为:

?


1

2

3

4

5

6

7

8

9

10

11

@Entity

@Table(name="contact")

public class ContactEO implements java.io.Serializable {

  @Id

  private Integer id;

  @Column(name="name")

  private String name;

  //省略get、set方法

}

@Table的属性定义如下:

?


1

2

3

4

5

6

7

@Target({TYPE}) @Retention(RUNTIME)

public @interface Table {

  String name() default "";

  String catalog() default "";

  String schema() default "";

  UniqueConstraint[] uniqueConstraints() default {};

}

要注意一下几个问题: 
a、该标记要在类前面 
b、name属性表示实体对应的表的名称 
c、catalog和shema属性表示实体指定的目录名或数据库名 
d、uniqueConstraints标记属性表示该实体所关联的唯一约束条件,一个实体可以有多个唯一约束条件

?


1

2

3

4

@Entity

@Table(name="contact", uniqueConstraints = {

  @UniqueConstraint(columnNames = {"name", "email"})

})

表示指定表的name和email字段为唯一表示,也就是说不能同时存在完全相同的name和email值的记录,相当于sql中:

?


1

2

...

unique key name_email (name,email)

@Column标记的属性定义如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

@Target({METHOD,FIELD}) @Retention(RUNTIME)

public @interface Column {

  String name() default "";

  boolean unique() default false;

  boolean nullable() default true;

  boolean insertable() default true;

  boolean updateable() default true;

  String columnDefinition() default "";

  String table() default "";

  int length() default 255;

  int precision() default 0;

  int scale() default 0;

}

使用@Column标记要注意几个问题: 
a、此标记可以标注在getter方法前或属性前 
b、unique属性表示该字段是否是唯一标识,默认为false 
c、columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。 
d、table属性表示当映射多个表时,指定表的表中的字段。 
e、precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。 
例如:自定义CLOB类型字段的SQL语句,代码如下:

?


1

2

@Column(name="constact_name", columnDefinition="clob not null")

private String name;

生成的SQL语句如下:

?


1

2

3

4

5

create table contact (

  id int not null;

  contact_name clob(200) not null;

  primary key (id)

)

4、可持久化的基础数据类型
(1)Java基础类型:byte, int, short, long, boolean, char, float, double
(2)Java基础数据类型对应的封装类: Byte, Integer, Short, Long, Boolean, Character, Float, Double
(3)字节和字符型数组: byte[], Byte[], char[], Character[]
(4)大数值类型: java.math.BigInteger, java.math.BigDecimal
(5)字符串类型:String
(6)时间日期类型:java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.TimeStamp
(7)枚举类型:用户定义的枚举类型
(8)Entity类型:标注为@Entity的类
(9)包含Entity类型的集合Collection类:java.util.Collection, java.util.List, java.util.Map
(10)嵌入式(embeddable)类

5.@Basic 设置加载方式
它的定义如下:

?


1

2

3

4

5

@Target({METHOD, FIELD}) @Retention(RUNTIME)

public @interface Basic {

  FetchType fetch() default EAGER;

  boolean optional() default true;

}

时间: 2024-10-27 05:23:25

实体映射基础的相关文章

02.Hibernate映射基础

前言:Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类.使我们操作实体类(Java对象)就能对数据库进行增.删.查.改,而不用调用JDBC API使数据操作变得简单而不繁琐.本文就主要讲解Hibernate的映射文件的映射机制,但本文讲解的重点在于通过Hibernate如何配置实体类到数据库表的映射,至于数据库表(或实体类)之间的各种关联关系的映射会在后面的文章中讲到. 1.映射配置文件基础(XXX.hbm.xml) 说明:本节只是对Hibernate的映射文

NHibernate 映射基础(第三篇) 简单映射、联合主键

NHibernate 映射基础(第三篇) 简单映射.联合主键 NHibernate完全靠配置文件获取其所需的一切信息,其中映射文件,是其获取数据库与C#程序关系的所有信息来源. 一.简单映射 下面先来一个简单的例子,然后随着不断地对这个例子修修改改,从而真正了解映射文件.具体的资料可以查看http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 先来看一张表: 映射文件Product.hbm.xml: <?xml versi

应用程序框架实战十四:DDD分层架构之领域实体(基础篇)

上一篇,我介绍了自己在DDD分层架构方面的一些感想,本文开始介绍领域层的实体,代码主要参考自<领域驱动设计C#2008实现>,另外参考了网上找到的一些示例代码. 什么是实体 由标识来区分的对象称为实体. 实体的定义隐藏了几个信息: 两个实体对象,只要它们的标识属性值相等,哪怕标识属性以外的所有属性值都不相等,这两个对象也认为是同一个实体,这意味着两个对象是同一实体在其生命周期内的不同阶段. 为了能正确区分实体,标识必须唯一. 实体的标识属性值是不可变的,标识属性以外的属性值是可变的.如果标识值

NHibernate3剖析:Mapping篇之集合映射基础(4):Map映射

系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种应用程序的集成,基于NHibernte3.0版本.如果你还不熟悉NHibernate,可以快速阅读NHibernate之旅系列文章导航系列入门,如果你已经在用NHibernate了,那么请跟上NHibernate3.0剖析系列吧. NHibernate专题:http://kb.cnblogs.com

Hibernate关系映射基础

1.  Hibernate关系映射基础 1.1.  Doctype <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 指定根元素和dtd文件的命名空间. 1.2.  hibernate-mapping <hiberna

ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射

原文:ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射 本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义,这个对象是用来将我们的数据持久化到数据库,一般来说,持久化对象中的字段会与数据库中对应的 table 保持一致. 2.视图对象VO(View Object):视图对象 V

hibernate的实体映射(一对一)

Hibernate的实体映射的主要任务就是实现数据库关系表与持久化类之间的映射,其关系如图: 双向映射一对一关联关系,通过唯一外键方式进行一对一关联映射,就是一个表的外键和另一个表的唯一主键对应形成一对一映射关系. 例如,以下例子,社团与社团负责人(社长),两者之间是一对一的关联关系: 持久化类association.java: public class Association implements java.io.Serializable{     private Integer id;   

使用Fluent API进行实体映射【Code-First系列】

现在,我们来学习怎么使用Fluent API来配置实体. 一.配置默认的数据表Schema Student实体 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EF4 { public class Student { public int StudentID { get; set; } publ

Hibernate(三)结构-配置文件-实体映射及配置文件

一.体系结构 SessionFactory:属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓存快照.Session的工厂.有可能持有一个可选的数据缓存可以进程级别或者群级别保存可以在事务中重用数据. 会话,Session:单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话.封装了一个JDDBC连接,它也是Transaction的工厂,保存有必须持久化对象的缓存,用于遍历对象,或者通过标识符查找对象. 持久化对象(Persistent Object)及其集合(Collect