1、單一主鍵java
單一主鍵:指表中由某一列來充當主鍵mysql
assigned 由java應用程序負責生成(手工賦值)sql
native 由底層數據庫自動生成提示符,若是是MySQL就是increment,若是是Oracle就是sequence,等等。另外,即便手動賦值主鍵,也不會起做用。數據庫
<generator class="native" />mysql 中爲AUTO_INCREMENT PRIMARY KEY緩存
2、基本類型session
Hibernate基本數據類型 前兩列比較經常使用,例如在配置文檔中的type就常用這些。ide
date 表示日期:YYYY-MM-ddspa
time 表示時間:hh:mm:ss代理
tiemstamp時間戳: yyyy-MM-dd hh:mm:sscode
另外,映射的數據類型設置會決定最後數據庫中的類型。 好比咱們在Java程序中使用的是java.util.Date類型定義變量Birthday。但在映射關係的配置文檔中對應的type改爲date類型,那麼最後保存在數據庫的Birthday類型就是date,也就是YYYY-MM-dd,而非java.util.Date(或者timestamp)的YYYY-MM-dd hh:mm:ss。
3、對象類型
1.clob和text對應大文本文件,blob對應大的二進制文件,例如視頻音頻圖片
2.java中的clob對應存儲大文本文件,java中的blob對應存儲大二進制文件
MySQL不支持標準SQL的CLOB類型,在Mysql中,用TEXT,MEDIUMTEXT及LONGTEXT類型來表示長度超過255的長文本數據
@Test public void saveImage() throws Exception { Student s = new Student(1, "李四", "男", new Date(), "北京"); File f = new File("d:" + File.separator + "boy.jpg"); InputStream input = new FileInputStream(f); Blob image = Hibernate.getLobCreator(session).createBlob(input, input.available()); s.setImage(image); session.save(s); } @Test public void readImage() throws Exception { Student s = (Student) session.get(Student.class, 1); Blob image = s.getImage(); InputStream input = image.getBinaryStream(); File f = new File("d:" + File.separator + "girl.jpg"); OutputStream output = new FileOutputStream(f); byte[] buff = new byte[input.available()]; input.read(buff); output.write(buff); output.close(); input.close(); }
4、組件屬性
組件屬性:實體類中的某個屬性屬於用戶自定義類的對象;
做用:將兩個實體類合併在一塊兒組建成一個表 在hbm.xml文件中配置:
格式:
<component name="取的名字" class="類名">
<property name="類中屬性" column="對應生成數據庫中列屬性名">
</component>
5、get和load和區別
1.在不考慮緩存的狀況下,get調用後當即發出sql語句,並返回對象。load調用後返回代理對象,保存了實體對象id,直到使用了對象的非主鍵屬性時才發出sql語句
2.當查詢到數據爲空時,get返回null,load返回objectNotFound異常