eric-1001c

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            3 隨筆 :: 45 文章 :: 12 評(píng)論 :: 0 Trackbacks
              Hibernate映射類型分為兩種:內(nèi)置的映射類型和客戶化映射類型。內(nèi)置映射類型負(fù)責(zé)把一些常見的Java類型映射到相應(yīng)的SQL類型;此外,Hibernate還允許用戶實(shí)現(xiàn)UserType或CompositeUserType接口,來靈活地定制客戶化映射類型

          1.內(nèi)置映射類型
             1).Java基本類型的Hibernate映射類型
          Java類型 Hibernate映射類型 標(biāo)準(zhǔn)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) 定長(zhǎng)字符
          String string VARCHAR 變長(zhǎng)字符
          boolean/Boolean boolean BIT 布爾類型
          boolean/Boolean yes/no CHAR(1)('Y'/'N') 布爾類型
          boolean/Boolean true/false CHAR(1)('T'/'F') 布爾類型


              2). Java時(shí)間和日期類型的Hibernate映射類型
          Java類型 Hibernate映射類型 標(biāo)準(zhǔn)SQL類型 描述
          java.util.Date/java.sql.Date date DATE 日期,yyyy-mm-dd
          java.util.Date/java.sql.TIme time TIME 時(shí)間,hh:mm:ss
          java.util.Date/java.sql.Timestamp timestamp TIMESTAMP 時(shí)間戳,yyyymmddhhmmss
          java.util.Calendar calendar TIMESTAMP 同上
          java.util.Calendar calendar_date DATE 日期,yyyy-mm-dd

          * 當(dāng)程序類型為java.sql.Timestamp, 數(shù)據(jù)庫(kù)中表屬性類型為timestamp的情況下,即使用戶以空值插入數(shù)據(jù),數(shù)據(jù)庫(kù)系統(tǒng)仍然會(huì)自動(dòng)填充timestamp的值

              3). Java 大對(duì)象類型的Hibernate映射類型
          Java類型 Hibernate映射類型 標(biāo)準(zhǔn)SQL類型 MySql類型 Oracle類型
          byte[] binary VARBINARY/BLOB BLOB BLOB
          String text CLOB TEXT CLOB
          serializable 實(shí)現(xiàn)serializable接口的一個(gè)java類 VARBINARY/BLOB BLOB BLOB
          java.sql.Clob clob CLOB TEXT CLOB
          java.sql.Blob blob BLOB BLOB BLOB
          *  在應(yīng)用程序中通過Hibernate來保存java.sql.Clob或者java.sql.Blob實(shí)例時(shí),必須包含兩個(gè)步驟:
                  a. 在一個(gè)數(shù)據(jù)庫(kù)事務(wù)中先保存一個(gè)空的Blob或Clob實(shí)例;b. 接著鎖定這條記錄,更新在步驟(1)中保存的Blob或Clob實(shí)例,把二進(jìn)制數(shù)據(jù)或長(zhǎng)文本數(shù)據(jù)寫到Blob或Clob實(shí)例中。
           1
           2Session session = sessionFactory.openSession();
           3Transaction tx = session.beginTransaction();
           4Customer customer = new Customer();
           5customer.setDescription(Hibernate.createClob("")); //先保存一個(gè)空的clob
           6session.save(customer);
           7session.flush();
           8//鎖定這條記錄
           9session.refresh(customer,LockMode.UPGRADE);
          10oracle.sql.CLOB clob = (oracle.sql.CLOB) customer.getDescription();
          11java.io.Writer pw = clob.getCharacterOutStream();
          12pw.write(longText);//longText是一個(gè)長(zhǎng)度超過255的字符串
          13pw.close();
          14tx.commit();
          15session.close();

          *  一個(gè)java類型對(duì)應(yīng)多個(gè)Hibernate映射類型的場(chǎng)合。例如,如果持久化類的屬性為java.util.Date類型,對(duì)應(yīng)的Hibernate映射類型可以是date,time
          或timestamp。此時(shí)必須根據(jù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的字段的SQL類型,來確定Hibernate映射類型。如果字段為Date類型,則hibernate映射為datge,如果為TIME則為time,如果為TIMESTAMP則為timestamp。


          2.客戶化映射類型
               (很麻煩的一個(gè)東西,稍微看了看,日后需要再研究并總結(jié))
          posted on 2008-01-24 15:57 Eric-1001c 閱讀(3413) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 濮阳县| 嵊泗县| 齐齐哈尔市| 白水县| 琼海市| 和顺县| 公主岭市| 宿迁市| 肥西县| 女性| 吉隆县| 宜兴市| 巩留县| 缙云县| 桂林市| 佳木斯市| 彭阳县| 浠水县| 哈密市| 长治市| 内黄县| 崇左市| 靖边县| 南投县| 宁城县| 濉溪县| 九江县| 南雄市| 天门市| 达州市| 南宁市| 钟祥市| 湘乡市| 日照市| 阳信县| 冀州市| 当雄县| 齐河县| 平定县| 凭祥市| 衢州市|