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

转:http://www.cnblogs.com/tazi/archive/2012/01/04/2311588.html

主键

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

 

日期类型:

 

可以直接使用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;//设置默认值

 

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

 

mysql中对应longblob

 

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

 

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

 

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

 

posted @ 2016-03-17 10:46  居无常  阅读(1043)  评论(0编辑  收藏  举报