Hibernate數據類型映射


  Hibernate映射類型分為兩種:內置的映射類型和客戶化映射類型。內置映射類型負責把一些常見的Java類型映射到相應的SQL類型;此外,Hibernate還允許用戶實現UserType或CompositeUserType接口,來靈活地定制客戶化映射類型
1.內置映射類型    1).Java基本類型的Hibernate映射類型

Java類型 Hibernate映射類型 標准SQL類型 大小和取值范圍
int/Integer int/integer INTEGER 4Byte
long/Long    long BIGINT 8Byte
short/Short short SAMLLINT 2Byte
byte/Byte byte TINYINT 1Byte
float/Float float FLOAT 4Byte
double/Double double DOUBLE 8Byte
BigDecimal big_decimal NUMBERIC Numeric(8,2)
char/Character/String character CHAR(1) 定長字符
String string VARCHAR 變長字符
boolean/Boolean boolean BIT 布爾類型
boolean/Boolean yes/no CHAR(1)('Y'/'N') 布爾類型
boolean/Boolean true/false CHAR(1)('T'/'F') 布爾類型

    2). Java時間和日期類型的Hibernate映射類型

Java類型 Hibernate映射類型 標准SQL類型 描述
java.util.Date/java.sql.Date date DATE 日期,yyyy-mm-dd
java.util.Date/java.sql.TIme time TIME 時間,hh:mm:ss
java.util.Date/java.sql.Timestamp timestamp TIMESTAMP 時間戳,yyyymmddhhmmss
java.util.Calendar calendar TIMESTAMP 同上
java.util.Calendar calendar_date DATE 日期,yyyy-mm-dd

* 當程序類型為java.sql.Timestamp, 數據庫中表屬性類型為timestamp的情況下,即使用戶以空值插入數據,數據庫系統仍然會自動填充timestamp的值
    3). Java 大對象類型的Hibernate映射類型

Java類型 Hibernate映射類型 標准SQL類型 MySql類型 Oracle類型
byte[] binary VARBINARY/BLOB BLOB BLOB
String text CLOB TEXT CLOB
serializable 實現serializable接口的一個java類 VARBINARY/BLOB BLOB BLOB
java.sql.Clob clob CLOB TEXT CLOB
java.sql.Blob blob BLOB BLOB BLOB

*  在應用程序中通過Hibernate來保存java.sql.Clob或者java.sql.Blob實例時,必須包含兩個步驟:         a. 在一個數據庫事務中先保存一個空的Blob或Clob實例;b. 接着鎖定這條記錄,更新在步驟(1)中保存的Blob或Clob實例,把二進制數據或長文本數據寫到Blob或Clob實例中。

Session session = sessionFactory.openSession();  
Transaction tx = session.beginTransaction();  
Customer customer = new Customer();  
customer.setDescription(Hibernate.createClob("")); //先保存一個空的clob  
session.save(customer);  
session.flush();  //鎖定這條記錄  
session.refresh(customer,LockMode.UPGRADE); 
oracle.sql.CLOB clob = (oracle.sql.CLOB) customer.getDescription();
java.io.Writer pw = clob.getCharacterOutStream(); 
pw.write(longText);//longText是一個長度超過255的字符串 
pw.close(); 
tx.commit(); 
session.close();

 

*  一個java類型對應多個Hibernate映射類型的場合。例如,如果持久化類的屬性為java.util.Date類型,對應的Hibernate映射類型可以是date,time 或timestamp。此時必須根據對應的數據庫表的字段的SQL類型,來確定Hibernate映射類型。如果字段為Date類型,則hibernate映射為datge,如果為TIME則為time,如果為TIMESTAMP則為timestamp。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM