spring jpa 如何给外键赋值

最近在用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;
		}
		
}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值