【发布时间】:2020-02-27 14:36:58
【问题描述】:
我可以将包含另一个对象的对象直接保存在数据库中吗?
我的后端结构是这样的:
- 休息服务
- 服务
- 存储库(扩展
JpaRepository) - 型号
假设我的模型中有两个实体:Company 和 Address。均由 IntelliJ 提供的 JPA 工具生成。
公司类模型
@Entity
public class Company {
private int idcompany;
private String name;
private Address address;
@Id
@Column(name = "idcompany")
public int getIdcompany() {
return idcompany;
}
public void setIdcompany(int idcompany) {
this.idcompany = idcompany;
}
@Basic
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne
@JoinColumn(name = "idaddress", referencedColumnName = "idaddress", nullable = false)
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
地址类模型
@Entity
public class Address {
private long idaddress;
private String zip;
@Id
@Column(name = "idaddress")
public long getIdaddress() {
return idaddress;
}
public void setIdaddress(long idaddress) {
this.idaddress = idaddress;
}
@Basic
@Column(name = "zip")
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
}
此外,两个实体都有一个扩展接口JpaRepository<T,ID> 的接口。所以,我有CompanyRepository 和AddressRepository。我在它们各自的 Service 类中使用这两个接口:CompanyService 和 AddressService。这是我放置业务逻辑的地方。一切好的!
现在,我使用 REST 服务通过 POST 接收对象 Company,其中包含对象 Address。我需要将它们保存到数据库(MySql)中。
在json文件中有Company,其中包含Address!
直到现在,我一直都在做这些步骤:
- 保存
Address; - 检索刚刚保存的
Address(我需要idaddress); - 我使用
setAddress将Address与公司关联; - 保存
Company
我试图保存通过 REST 接收到的对象 Company,从 CompanyService 调用方法 save(使用 CompanyRepository)但我收到了错误:
Column 'idaddress' cannot be null
我问你。有没有更简单的方法可以同时保存Company 和Address 使用JpaRepository???
【问题讨论】:
-
你得到的json对象是什么样子的?
-
来自 POST。我将 RequestBody 映射到我的对象。
标签: java mysql jpa spring-data-jpa logic