最近在用spring data jap 的时候遇到一个问题,就是无法给一张表的外键赋予值,
在A实体类中有一个属性的是另一个实体类B
如图
@JoinColumn的name指的是数据库表中的外键字段uid
这个外键在数据库中是vachar型的,但是在我的程序里却是一个实体类型的就是那个patient类
那么如果我们要在数据库表中添加一条数据,且还要为uid这个字段赋值的话,要怎么做呢?
如下图
这样就行了,这个问题困扰了我两三天,一开始也不是没想过用这种办法,而且实验了,但是失败了
失败的原因是因为@OneToOne注解被我设置了 cascade=CascadeType.PERSIST 这个属性,然后一运行就抛异常,不知道是什么原因 找了找网上的说法是 因为
"CascadeType.PERSIST只有A类新增时,会级联B对象新增。若B对象在数据库存(跟新)在则抛异常(让B变为持久态)"这个,但我也不是很理解这句话的意思。之所以写这篇博客是因为在网上找不到把这个问题说的很清楚的博客或者资料,希望其他新人能脱离这个坑。
以下是实体类chat
@Entity(name = "chat")
public class chat {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
int id;
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "msg", columnDefinition = "Text")
String msg;
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "hfmsg", columnDefinition = "Text")
String hfmsg;
@Column(name = "savetime")
String savetime;
@OneToOne
@JoinColumn(name = "uid")
patient patient;
public int getId() {
return id;
}
public patient getPatient() {
return patient;
}
public void setPatient(patient patient) {
this.patient = patient;
}
public void setId(int id) {
this.id = id;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getHfmsg() {
return hfmsg;
}
public void setHfmsg(String hfmsg) {
this.hfmsg = hfmsg;
}
public String getSavetime() {
return savetime;
}
public void setSavetime(String savetime) {
this.savetime = savetime;
}
}
另一个实体类patient
@Entity(name="patient")
public class patient {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
int id;
@Column(name="uname")
String uname;
@Column(name="upass")
String upass;
@Column(name="tname")
String tname;
@Column(name="sex")
String sex;
@Column(name="age")
String age;
@Column(name="idcard")
String idcard;
@Column(name="tel")
String tel;
@Column(name="addr")
String addr;
@Column(name="delstatus")
String delstatus;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getDelstatus() {
return delstatus;
}
public void setDelstatus(String delstatus) {
this.delstatus = delstatus;
}
}