xuhb1979 2009-07-29 23:09
浏览 365
已采纳

jpa中复合主键并且都是外键,请问怎么写注解?

jpa中复合主键并且都是外键,请问怎么写注解?
比如:有个好友表tfriend
有两个字段:用户ID(userId)、好友ID(friendId)
这个两个字段都是引用用户表tuser的主键;
我要用注解来对实体好友类怎么写???

急需帮助!!! :(

  • 写回答

1条回答 默认 最新

  • samungtered 2009-07-31 12:08
    关注

    在设计数据库表的时候,往往会设计出带有复合主键的表,即表的记录由多个字段联合标识,如:

      表

    [code="sql"]
    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
    )

    [/code]
      其中,复合主键为(STAT_DATE,PATH_ID,TYPE)

      针对这种情况,hibernate(jpa) 的 annotation 映射声明如下:

      1、复合主键类HourDataPK
    [code="java"]

    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;
        }
    }

    [/code]
      2、实体类HourData:

    [code="java"]
    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;
        }
    }

    [/code]

    网上 可以找到很多资料的 啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘