隨筆 - 55  文章 - 187  trackbacks - 0
          <2009年2月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          1234567

          常用鏈接

          留言簿(12)

          隨筆分類

          隨筆檔案

          groovy

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          在設計數據庫表的時候,往往會設計出帶有復合主鍵的表,即表的記錄由多個字段聯合標識,如:


          CREATE TABLE TB_HOUR_DATA
          (
            STAT_DATE  DATE                   NOT NULL,
            PATH_ID    NUMBER(
          20)             NOT NULL,
            VALUE      VARCHAR2(
          512 BYTE),
            TYPE       NUMBER(
          1)              NOT NULL
          )
          其中,復合主鍵為(STAT_DATE,PATH_ID,TYPE)

          針對這種情況,hibernate(jpa) 的 annotation 映射聲明如下:
          1、復合主鍵類HourDataPK
          package net.kong.wolf.stat.db.entity;

          import java.io.Serializable;
          import java.util.Date;

          import javax.persistence.Column;
          import javax.persistence.Embeddable;
          import javax.persistence.JoinColumn;
          import javax.persistence.ManyToOne;
          import javax.persistence.Temporal;
          import javax.persistence.TemporalType;

          @Embeddable
          public class HourDataPK implements Serializable {

              
          /**
               * 
               
          */

              
          private static final long serialVersionUID = 1L;

              @ManyToOne
              @JoinColumn(name 
          = "path_id", nullable = false)
              
          private Path path;

              @Column(name 
          = "stat_date")
              @Temporal(TemporalType.DATE)
              
          private Date statDate;

              
          private int type;

              
          public Path getPath() {
                  
          return path;
              }


              
          public void setPath(Path path) {
                  
          this.path = path;
              }


              
          public Date getStatDate() {
                  
          return statDate;
              }


              
          public void setStatDate(Date statDate) {
                  
          this.statDate = statDate;
              }


              
          public int getType() {
                  
          return type;
              }


              
          public void setType(int type) {
                  
          this.type = type;
              }

          }


          2、實體類HourData:
          package net.kong.wolf.stat.db.entity;

          import java.io.Serializable;

          import javax.persistence.EmbeddedId;
          import javax.persistence.Entity;
          import javax.persistence.Table;

          import net.kong.wolf.stat.core.Text;

          @Entity
          @Table(name 
          = "TB_HOUR_DATA")
          public class HourData implements Serializable {

              
          /**
               * 
               
          */

              
          private static final long serialVersionUID = 1L;

              @EmbeddedId
              
          private HourDataPK pk;

              
          private String value;

              
          public String getValue() {
                  
          return value;
              }


              
          public void setValue(String value) {
                  
          this.value = value;
              }


              
          public int[] getHours() {
                  
          return parseValue(value);
              }


              
          private int[] parseValue(String value) {
                  
          int[] result = new int[24];
                  
          for (int i = 0; i < 24; i++{
                      result[i] 
          = -1;
                  }

                  
          if (value == null{
                      
          return result;
                  }

                  String[] hs 
          = Text.splitCSV(value);
                  
          int len = Math.min(24, hs.length);
                  
          for (int i = 0; i < len; i++{
                      result[i] 
          = Text.parseInt(hs[i], -1);
                  }

                  
          return result;
              }


              
          public void setHours(int[] hours) {
                  
          int[] tHours = parseValue(value);
                  StringBuilder sb 
          = new StringBuilder();
                  
          int len = Math.min(24, hours.length);
                  
          for (int i = 0; i < len; i++{
                      sb.append(hours[i] 
          < 0 ? tHours[i] : hours[i]).append(',');
                  }

                  sb.deleteCharAt(sb.length() 
          - 1);
                  
          this.value = sb.toString();
              }


              
          public HourDataPK getPk() {
                  
          return pk;
              }


              
          public void setPk(HourDataPK pk) {
                  
          this.pk = pk;
              }

          }

          posted on 2009-02-25 14:10 大衛 閱讀(3007) 評論(2)  編輯  收藏 所屬分類: Java

          FeedBack:
          # re: hibernate(jpa)復合主鍵annotation聲明方法 2009-02-26 10:07 Mr.wang
          學習  回復  更多評論
            
          # re: hibernate(jpa)復合主鍵annotation聲明方法 2009-03-03 13:19 相似
          有夠爛  回復  更多評論
            
          主站蜘蛛池模板: 崇左市| 图片| 郯城县| 卢氏县| 昌宁县| 绥中县| 古蔺县| 澄江县| 增城市| 平阴县| 内乡县| 邳州市| 镇坪县| 乐平市| 准格尔旗| 汨罗市| 专栏| 美姑县| 宿州市| 靖西县| 溧水县| 雷州市| 石柱| 吴桥县| 浠水县| 九龙县| 中西区| 昌乐县| 延川县| 咸阳市| 梅河口市| 沙洋县| 芜湖县| 淮滨县| 惠来县| 嘉祥县| 宿州市| 论坛| 赫章县| 临朐县| 平湖市|