实体的基本映射

 

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;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值