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;



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: