@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
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)