在spring数据中保存父项时如何引用子项id
我有多对一的关系。 是否可以在保存父项之前根据特定列选择子项数据库id 这是我的密码:在spring数据中保存父项时如何引用子项id,spring,hibernate,spring-boot,spring-data-jpa,spring-data,Spring,Hibernate,Spring Boot,Spring Data Jpa,Spring Data,我有多对一的关系。 是否可以在保存父项之前根据特定列选择子项数据库id 这是我的密码: public class Employee { @AssociationOverrides({@AssociationOverride(name = "staffNumber"), @AssociationOverride(name = "staffNumber"), @AssociationOverride(name = "homeAddress
public class Employee {
@AssociationOverrides({@AssociationOverride(name = "staffNumber"), @AssociationOverride(name = "staffNumber"),
@AssociationOverride(name = "homeAddress", joinColumns = @JoinColumn(name = "homeAddress")),
@AssociationOverride(name = "officeAddress", joinColumns = @JoinColumn(name = "officeAddress"))})
@EmbeddedId
private EmployeeId id;
}
@Data
@Embeddable
public class EmployeeId {
@Column(name = "staffNumber")
private String staffNumber;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Address homeAddress;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Address officeAddress;
}
@Data
public class Address {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Columnn(name="country")
private String country;
@Column(name="city")
private String city;
}
public interface EmployeeRepository extends CrudRepository<Employee, EmployeeId> {}
无需选择
addressRepository.findAddressByCity(city)
其中我只有一个没有id(id=0)的地址,但在数据库中有一个城市(“纽约”,id为2,“旧金山”,id为1)
您可以在不知道子主id的情况下保存子记录,但如果提取的不是主键列,请确保结果应该是唯一的
Employee employee = new Employee();
employee.setStaffNumber("123);
您可以通过其他列找到地址,如下所示
Address officeAddress = addressRepository.findAddressByCity(city); // Office Address
Address homeAddress = addressRepository.findAddressByCity(city); // Home Address
// Setting child objects in parent object
employee.setHomeAddress(homeAddress);
employee.setOfficeAddress(officeAddress);
最后,保存父对象,它将使用家庭和办公室地址保存员工详细信息
employeeRepository.save(employee);
是否要根据子表列名选择子表记录?请确切地指定所需的详细信息。我希望将父项与子项一起保存。我想做
employeeRepository.save(employee)代码>不必首先在db中搜索地址id,结果如下``Employee:{EmployeeId:{staffNumber:“123”,homeAddress:id:2,-->2是地址表id officeAddress:id:1-->1是地址表id}“``你的意思是要用新地址保存新员工?请检查这是否可以在不知道孩子id的情况下保存孩子?但我知道一些孩子的专栏?谢谢Naresh。我希望我不必先做findAddressByCity
来安排孩子们。我希望在Adress中有一些注释可以用来查询,可能类似于@query(“从地址中选择id,城市=$”
Address officeAddress = addressRepository.findAddressByCity(city); // Office Address
Address homeAddress = addressRepository.findAddressByCity(city); // Home Address
// Setting child objects in parent object
employee.setHomeAddress(homeAddress);
employee.setOfficeAddress(officeAddress);
employeeRepository.save(employee);