读书人

实业的基本映射

发布时间: 2012-09-14 23:00:49 作者: rapoo

实体的基本映射

?

JPA的三大核心组件 ?EntityManager ,实体 和 JPQL

?

?

虽然JPA可以用XML映射来管理实体与数据表之间的映射关系 ,但实际开发中,用Annotation 比较多

?

对于一个JPA实体来说,通常用如下两个Annotation来修饰

?

?

@Entity:被该Annotation 修饰的POJO就是一个实体,可以指定一个name属性(实体名称),可以不指定默认该类名为实体名称

@Table:该Annotation指定实体所映射的表

?

@Table 的属性 ?

?

catalog

name

schema

uniqueConstraints ? 设置唯一约束

?

?

@Column为了指定某个属性所映射的数据列的详细信息,如,列名,列字段长等,用@Column修饰该属性

?

@Column属性

?

insertable

length

name

nullable

table

unique ?是否具有唯一约束

updatable?

?

?

@Transient ?修饰不想持久保持的Field

?

@Transient

private String content; ? //值不会保存到数据表中

?

@Enumerated 修饰枚举类型的Field

?

假设有一个season.java枚举类

?

public enum Season{spring,summer,autumn,winter}

?

?

@Eunmerated(EnumType.ORDINAL) ? ?//ordinal n.序数 ?,

//有两种格式 EnumType.STRING 存储的是枚举的值,

//EnumType.ORDINAL存储的枚举的序列号,1,2,3,,

@Column(name="season")

private Season happenSeason;

?

@LOB ?@Basic修饰大数据类型的Field

?

当实体的Field为byte[],Byte[]或者java.io.Serializable类型时 @Lob修饰的Field映射为底层的Bolb列

当实体的Field为char[],Character[],java.lang.String类型时,@Lob修饰的Field映射为底层的Clob列

?

?

@Lob

private byte[] pic;

?

?

保存pic的demo

?

File file = new File("img.png");

byte[] content = new byte[(int)file.length];

new FileInputStream(file).read(content);

person.setPic(content); ? // 前面 ,setTitle, setName ,一样 ?后面保存一样

?

?

比如我现在要查person的name,不想看Person的pic 怎么办呢,JPA提供延迟加载 @Basic 修饰

?

@Basic 的属性 ?1.fetch (FetchType.EAGER ? 不使用延迟加载;FetchType.LAZY 使用延迟加载)

2.optional ? 指定Field映射的数据列是否允许null值。

?

?修改Person 实体如下

?

private String name; ?// 这个以上的都不变

?

@Lob

@Basic(fetch=FetchType.LAZY)

private byte[] pic;

/////////////////////////////////////////////////////////////这样就OK?

?

@Temporal ?修饰日期类型的Field

?

java 日期时间类型有两种 java.util.Date, ? java.util.Calendar

?

数据库日期时间类型有 ? ?date, time ,datetime, timestamp

?

用Temporal 的value 属性 ?Temporal.DATE ? ? ??Temporal.TIME ? ? ?Temporal.TIMESTAMP?

?

分别对应数据的类型?

?

@Temporal(TemporalType.DATE)

private DATE birth;

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

读书人网 >软件架构设计

热点推荐