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 NULL VARCHAR2(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、付费专栏及课程。

余额充值