<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Neil的備忘錄

    just do it
    posts - 66, comments - 8, trackbacks - 0, articles - 0

    Hibernate 主鍵自動生成策略

    Posted on 2008-09-02 12:51 Neil's NoteBook 閱讀(817) 評論(0)  編輯  收藏
        最近項目中使用到的一個主鍵自動生成策略,持久層框架為Hibernate,數據庫為Oracle9i.
        生成方式是:當天時間(8位)+流水號(8位),以下是代碼
       
     1 import java.io.Serializable;
     2 import java.text.SimpleDateFormat;
     3 import java.util.Date;
     4 import java.util.Properties;
     5 
     6 import org.hibernate.HibernateException;
     7 import org.hibernate.dialect.Dialect;
     8 import org.hibernate.engine.SessionImplementor;
     9 import org.hibernate.id.TableGenerator;
    10 import org.hibernate.type.Type;
    11 
    12 import com.seektax.tams.util.StringUtil;
    13 
    14 public class MyCustomizedIdGenerator extends TableGenerator {
    15     private String rulesize;
    16     private String curDate;
    17     
    18     public void configure(Type type, Properties params, Dialect d) { 
    19         super.configure(type, params, d);
    20         curDate = params.getProperty("curDate"== null ? "dddddddd" : getCurDate();
    21         rulesize = params.getProperty("rulesize"== null ? "0" :
    22         params.getProperty("rulesize"); 
    23         } 
    24 
    25         public synchronized Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
    26             StringBuffer Iddm = new StringBuffer(512);
    27             String tempid = String.valueOf(super.generate(session, obj)); 
    28             tempid = StringUtil.LPAD(tempid, Integer.valueOf(rulesize).intValue(), "0");
    29             if(tempid.length() > Integer.parseInt(rulesize))
    30             {
    31                 tempid = tempid.substring(tempid.length()-Integer.parseInt(rulesize), tempid.length());
    32             }
    33             Iddm.append(curDate);
    34             Iddm.append(tempid);
    35             return new Long(Long.parseLong((Iddm.toString())));
    36         } 
    37         
    38         /**
    39          * 獲取當天日期
    40          */
    41         private String getCurDate()
    42         {
    43             Date curDate = new Date();
    44             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    45             String curDay = sdf.format(curDate);
    46             return curDay;
    47         }
    48         
    49 }
    50 
        String tempid = String.valueOf(super.generate(session, obj)); 
        tempid = StringUtil.LPAD(tempid, Integer.valueOf(rulesize).intValue(), "0");
        以上兩句話是當自動生成的ID位數不夠時自動補零.方法代碼為:
     1 /**
     2      * 類似于oralce LPAD 從左到右
     3      * @param source
     4      * @param newSize
     5      * @param replaceString
     6      * @return
     7      */
     8     public static String LPAD(String source, int newSize, String replaceString) {
     9         String result = "";
    10         if (source.length() < newSize) {
    11             for (int i = 0; i < newSize - source.length(); i++) {
    12                 result += replaceString;
    13             }
    14             result = result + source;
    15 
    16         } else {
    17             result = source;
    18         }
    19         return result;
    20     }
        然后,需要在配置文件中配置該主鍵生成策略,代碼如下:
    1        <id name="id" type="long">
    2             <column name="ID" precision="16" scale="0" />
    3             <generator class="com.seektax.tams.modules.xxcj.MyCustomizedIdGenerator"> 
    4               <param name="table">SERIAL_NO</param>    //數據庫表名
    5               <param name="column">DAJBXXID</param>    //表中字段名
    6               <param name="curDate">curDate</param>   
    7               <param name="rulesize">8</param>         //定義位數
    8             </generator> 
    9         </id>
        配置好這些就OK了!
        注:由于項目中使用的是雙主鍵,在插入一方的同時,多方也要重新獲得主鍵,如:
    1       DaPageId id = new DaPageId();
    2       id.setXh(i+1);
    3       id.setDaId(jbxx.getId());
        (完)

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 精品国产亚洲一区二区三区在线观看| 一二三四在线观看免费高清中文在线观看 | 内射无码专区久久亚洲| 免费黄色福利视频| 成人免费区一区二区三区| 看全免费的一级毛片| 99久久国产亚洲综合精品| 亚洲人成电影在线天堂| 亚洲日韩精品无码专区网址| 国产一级大片免费看| 成年午夜视频免费观看视频| 中文毛片无遮挡高潮免费| 免费日本一区二区| 中文字幕免费视频精品一| 美女被免费视频网站| 亚洲国产成人久久精品大牛影视| 亚洲国产精品久久人人爱| 亚洲人成在线电影| 久久精品亚洲视频| 九月丁香婷婷亚洲综合色| 狠狠亚洲婷婷综合色香五月排名| 免费一级特黄特色大片在线| 国产精品免费电影| 成人免费看黄20分钟| 成人免费视频试看120秒| 永久免费AV无码国产网站| 美女网站免费福利视频| 在线观看免费av网站| 99re在线这里只有精品免费| 免费国产午夜高清在线视频| 久久免费精品一区二区| 国产va在线观看免费| 99re6免费视频| 麻花传媒剧在线mv免费观看| 亚洲网站免费观看| 在线观看免费人成视频| 男女交性永久免费视频播放| 国产gav成人免费播放视频| 国产一区二区免费在线| 亚洲精品成人片在线观看| 亚洲精品无码久久久久sm|