<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());
        (完)

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


    網站導航:
     
    主站蜘蛛池模板: 免费观看的毛片大全| 一区国严二区亚洲三区| 亚洲精品久久久久无码AV片软件| 成人亚洲网站www在线观看 | 中文字幕免费在线看电影大全 | 亚洲日本韩国在线| 88av免费观看入口在线| 小说专区亚洲春色校园| 91久久亚洲国产成人精品性色| 国产成人在线免费观看| 免费无码又爽又刺激高潮视频| 立即播放免费毛片一级| 亚洲熟妇av一区二区三区下载| 中文字幕第13亚洲另类| 免费无码A片一区二三区 | 无码精品A∨在线观看免费| 人妻仑刮八A级毛片免费看| 4444亚洲国产成人精品| 亚洲裸男gv网站| 成人免费视频观看无遮挡| 男的把j放进女人下面视频免费| 亚洲AⅤ男人的天堂在线观看| 91亚洲国产成人久久精品网站 | 亚洲一久久久久久久久| 亚洲国产高清人在线| 亚洲免费无码在线| 永久免费AV无码网站在线观看| 99久久99久久免费精品小说| 香蕉视频在线免费看| 亚洲欧美在线x视频| 麻豆狠色伊人亚洲综合网站| 久久精品国产亚洲AV麻豆王友容| 亚洲成A人片在线观看无码3D| 中文字幕无码免费久久99| 成人久久免费网站| 亚洲国产免费综合| 黄色免费网址在线观看| 亚洲AV永久无码精品一福利| 亚洲一级毛片免费看| 亚洲精品视频在线播放| 亚洲V无码一区二区三区四区观看|