JPA字段映射(uuid,日期,枚举,@Lob)

JPA字段映射(uuid,日期,枚举,@Lob)

主键:

JPA主键的生成策略不像Hibernate那么丰富。

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

@GeneratedValue的属性strategy指定生成策略,

IDENTITY(自增长方式,如mysql)

SEQUENCE (序列方式,如oracle)

TABLE (表方式,该方式便于数据库移植,但效率不高,主键的值是从这个表中取得的。)

AUTO (自动方式,该方式会把主键生成交给JPA的实现者来决定,Hibernate会根据底层数据库选择合适的方式,如果用这种方式,可以不写,默认如此)

使用Hibernate提供的uuid方式(用于分布式应用,根据ip地址,JVM启动时间,系统时间和一个计数器值(在当前的JVM中惟一)产生32位长度的字符串)

@Entity
@GenericGenerator(name=”uuid_s”,strategy=”uuid”)
public class Person implements java.io.Serializable{

@Id
@GeneratedValue(generator="uuid_s") @Column(length=32)
private String id; //必须Sring

//…
}

oracle测试结果:

SQL> desc person;
名称 是否为空? 类型


ID NOT NULLVARCHAR2(32 CHAR)
BIRTH TIMESTAMP(6)
GENDER NUMBER(10)
NAME NOT NULL VARCHAR2(10 CHAR)

SQL> select * from person;

ID

BIRTH

GENDER NAME

8a8a4dcf349eac5901349eac5d910001
02-1月 -12 09.47.03.339000 下午
0 tazi

字符串类型:不指定长度时,数据库中长度为255,mysql中映射为varchar(255)

日期类型:

可以直接使用java.util.Date

2011-12-12 在hibernate配置文件中可以用type=”date”

2011-12-12 12:23:12 可以用type=”datestam”(?)

12:23:12可以用type=”time”

在JPA注解方式可以用

@Temporal(TemporalType.DATE) //还有TIME,TIMESTAMP
private Date birth;

枚举类型:

男和女可以用枚举作为实体Bean的属性值类型,那么枚举值保存到数据库后使用枚举值使用索引值(0开始)还是字符值呢。注意保存枚举值时加上非空约束,最好加上长度。

面向对象的方式考虑问题,怎样设置默认值,直接在类的属性里设值。

package com.domin;

public enum Gender {
MAN,WOMAN
}

@Enumerated(EnumType.STRING) @Column(length=5,nullable=true) //ORDINAL为索引方式
private Gender gender=Gender.MAN;//设置默认值

大数据字段映射:

(1)可以在字符型的属性或字段上加上@Lob

@Lob
private String description;
在mysql中映射产生的字段的类型是longtext

在oracle中是 CLOB

(2)可以在Byte[]类型的字段上加@Lob

mysql中对应longblob

oracle中不能使用byte[]字段加@Lob的方式直接映射

大数据字段最好再加上延迟加载

@Lob @Basic(fetch=FetchType.LAZY)
private Byte[] file;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值