Java 使用JpaRepository同时保存合成对象
我可以直接在数据库中保存包含另一个对象的对象吗 我的后端结构如下所示:Java 使用JpaRepository同时保存合成对象,java,mysql,jpa,spring-data-jpa,logic,Java,Mysql,Jpa,Spring Data Jpa,Logic,我可以直接在数据库中保存包含另一个对象的对象吗 我的后端结构如下所示: 休息服务 服务 存储库(扩展JpaRepository) 模型 假设我的模型中有两个实体:公司和地址。两者都是由IntelliJ提供的JPA工具生成的 公司级模型 @Entity public class Company { private int idcompany; private String name; private Address address; @Id @Column
JpaRepository
)公司
和地址
。两者都是由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;
}
}
地址类模型
@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
。因此,我有CompanyRepository
和AddressRepository
。我在各自的服务类中使用这两个接口:CompanyService
和AddressService
。这就是我将业务逻辑放在这里的地方。全部正常
现在,我收到了一个REST服务,通过POST一个对象公司
,它包含对象地址
。我需要将它们保存到数据库(MySql)中
在json文件中有公司
,其中包含地址
到目前为止,我一直在执行以下步骤:
地址
李>
地址
(我需要idaddress
)李>
setAddress
将地址与公司关联李>
保存公司
我试图保存通过REST从CompanyService
(使用CompanyRepository
)调用方法save
接收到的对象Company
),但出现错误:
Column 'idaddress' cannot be null
我问你。使用JpaRepository
?是否有一种更简单的方法可以同时保存公司
和地址
您可以定义PERSIST,以便在持久化公司时让地址持久化:
@ManyToOne
@JoinColumn(name = "idaddress", referencedColumnName = "idaddress", nullable = false,
cascade = CascadeType.PERSIST)
public Address getAddress() {
return address;
}
对于EntityManager上的每个方法,都定义了一个级联类型
在此处阅读有关级联类型的更多信息:
您从帖子中看到的json对象是什么样子的。我将RequestBody映射到我的对象。