问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-26 00:18

我来回答

2个回答

懂视网 时间:2022-05-07 04:32

http://note.youdao.com/share/?id=9065b839f2d6b3f1b6310ad9bb92d3f6type=note @Entity@Table(name = RELEASE_INFO_ELEMENT)public class ReleaseInfoElement { @EmbeddedId private PK pk = new PK(); @Column(name = VALUE) private String value; public

http://note.youdao.com/share/?id=9065b839f2d6b3f1b6310ad9bb92d3f6&type=note

@Entity @Table(name = "RELEASE_INFO_ELEMENT") public class ReleaseInfoElement { @EmbeddedId private PK pk = new PK(); @Column(name = "VALUE") private String value; public Long getInfoId() { return pk.infoId; } public void setInfoId(Long infoId) { pk.infoId = infoId; } public Long getParamId() { return pk.paramId; } @Override public String toString() { return "ReleaseInfoElement [infoId=" + pk.infoId + ", paramId=" + pk.paramId + ", value=" + value + "]"; } public void setParamId(Long paramId) { pk.paramId = paramId; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Embeddable public static class PK implements Serializable { @Column(name = "INFO_ID") private Long infoId; @Column(name = "PARAM_ID") private Long paramId; public PK() { super(); } } }

热心网友 时间:2022-05-07 01:40

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

  表

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
)

  其中,复合主键为(STAT_DATE,PATH_ID,TYPE)

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

  1、复合主键类HourDataPK

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

  2、实体类HourData:

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;
    }
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
南安椎间盘突出症的症状,悬壶邱腰神在陕西哪里 安康腰椎间盘突出一条腿麻保守治疗的方法,悬壶邱大夫的详细位置_百度知 ... 宣传片拍摄有哪些长处? 继承房产过户费用要多少? 继承5万房产过户需要多少费用多少钱 继承的房产过户需要多少费用 继承5万房产过户需要多少费用 灵芝茶减肥效果怎么样 南京滴滴和t3哪个收入多 属虎女人的和属鸡男人的配吗 车厘子树苗哪里实地考察能批量选购? jpa自动截取过长字符串 一亩田车厘子树苗价格? 车厘子价格“腰斩”,国产大樱桃上市就“跳水”,到底是因为什么? 支付宝转帐手续费多少? 青椒回锅肉的做法 土豆回锅肉的做法 蚝油青椒回锅肉的做法,蚝油青椒回锅肉怎么做 青椒回锅肉的家常做法都有哪些啊?孕妇适合吃这道菜吗?大家知道吗? 家常菜青椒回锅肉,需要提前准备哪些食材呢? 青椒回锅肉片怎么做好吃 青椒回锅肉的做法二 青椒回锅肉的做法一 青椒回锅肉,回锅肉的家常做法,回锅肉怎么做好吃 青椒回锅肉怎么做好吃,青椒回锅肉的家常做法 广府文化有哪些? 介绍广府文化。 广府话是什么话 广府在哪儿 广府的位置 广府古城的古城简介 jpa分页查询怎么做 烟台大樱桃树苗哪个品种好/烟台大樱桃树苗多少钱/烟台大樱桃苗 淘宝里面的车厘子为什么4年苗便宜? JPA枚举比较不等于失败问题,怎么解决 车厘子不就是大樱桃吗,为什么价格那么高? 求助,jpa为含有复合主键如何建立一对多的关联 jpa执行mysql报空指针 jpa中怎样使用between jpa中的delete功能报错 jpa hibernate 不能映射 boolean spring data jpa orderby 可以加多个参数吗 怎样用JPA的EntityManager执行原生sql返回ResultSet-CSDN论坛 java中Spring data jpa通过Predicate查询时间段 国内最大原料药龙头股? 现在在西安加盟个旅游门市可行吗?客源怎么保证? 苏州中旅国际旅行社有限公司怎么样? 我想开家旅行社,挂靠那家比较靠谱? 中国旅行社..中国国际旅行社.还有青年旅行社...分别是哪一年成立的?华侨旅行社是最早的对外旅行社吗?? 中国有哪些国有旅行社 国旅 中旅 青旅这三家的全名叫什么呢?