Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在spring数据中保存父项时如何引用子项id_Spring_Hibernate_Spring Boot_Spring Data Jpa_Spring Data - Fatal编程技术网

在spring数据中保存父项时如何引用子项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

我有多对一的关系。 是否可以在保存父项之前根据特定列选择子项数据库id

这是我的密码:

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);