关于jpa联合主键,且主键同时为其他表外键时的配置

关于jpa联合主键,且主键同时为其他表外键时的配置,第1张

进行面向对象的分析,uer和role之间是双向多对多联系,使用JPA配置如下所示:

@Entity

public class User implements Serizlizable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private int id

private String userName

private String passWord

@ManyToMany(cascade = CascadeType.ALL)

private List<Role>roles

......

......

}

@Entity

public class Role implements Serizlizable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private int id

private String role

@ManyToMany(mappedBy = "roles")

private User user

......

......

}

配置后,会在数据库中生存你想要的3个表。

不是必须一致。

1.1删除主键约束:

alter table 表名 drop primary key

1.2针对已经存在的表增加联合主键:

alter table 表名 add constraint 主键约束的名字 primary key(列名1,列名2)#未存在的表直接加在列后

2、唯一约束:unique

特征:1.唯一约束修饰的列,不允许有重复的值,但是可以有空值2.一个表中可以有多个唯一约束;3.唯一约束默认情况下,约束名字和列名是一样的;4.具有唯一约束的列,系统会自动给它分配一个唯一索引。****

增加唯一约束:

alter table 表名 add unique(列名);

2.1删除唯一约束格式:

alter table 表名 drop index 唯一约束的名字

3、默认约束:default 一个表可以有多个

格式:default ‘值’

针对存在表,增加默认约束

alter table 表名 modify 列名 数据类型 default '值'

3、1删除默认约束

alter table 表名 modify 列名 数据类型

4、非空约束 not null 可以有多个表增加

alter table 表名 modify 列名 数据类型 not null

4、1删除非空约束

alter table 表名 modify 列名 数据类型

外键约束: foreign key 可以有多个 ,从表参照主表,主表也参照从表,可以列名不一样但是数据类型和内容必须一样。

增加外键约束

alter table 从表 add constraint 外键名 foreign key (从表列名) references 主表(主表列名)

5.删除外键约束

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

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 = 0i <24i++) {

  result[i] = -1

  }

  if (value == null) {

  return result

  }

  String[] hs = Text.splitCSV(value)

  int len = Math.min(24, hs.length)

  for (int i = 0i <leni++) {

  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 = 0i <leni++) {

  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

  }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6719725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存