SpringBoot JPA持久保留具有空列的父级的子级

问题描述 投票:0回答:1

我有一个奇怪的问题。我有实体公司,分公司和地址。公司有分支机构清单,每个分支机构都有地址。我试图使用地址实体之前不存在的分支进行持久化,但是地址为null列的持久化。

@Data
@Entity
@Indexed
@Table(name = "company")
public class Company {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator"
    )
    private String id;

    @Field
    @Column(name = "full_name", nullable = false, unique = true)
    private String fullName;

    @OneToMany(mappedBy = "company")
    private Set<Branch> branches;

}
@Data
@Entity
@Table(name = "branch")
public class Branch {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column
    private String phone;

    @Column
    private String email;

    @OneToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name = "address_id", referencedColumnName = "id")
    private Address address;

    @ManyToOne
    @JoinColumn(name = "company_id", referencedColumnName = "id")
    private Company company;
}
@Entity
@Table(name = "address")
public class Address {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column
    private String street;


    @OneToOne(mappedBy = "address")
    private Company company;

    @OneToOne(mappedBy = "address")
    private Branch branch;
}

服务...

    public Integer addBranch(BranchDto branchDto) {
        Branch branch = modelMapper.map(branchDto, Branch.class);

        Company company = companyRepository.getCompanyById(branchDto.getCompanyId());
        branch.setCompany(company);

        return branchRepository.save(branch).getId();
    }

Dto ...

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BranchDto {

    private Integer id;

    private String phone;

    private String email;

    private AddressDto address;

    private String companyId;
}

这就是效果...

enter image description here

调试器...

enter image description here

是什么问题?你能帮我吗?

java database spring jpa cascade
1个回答
0
投票

您正在使用具有相同ID的'mappedBy',它仅适用于他找到的第一个ID。

尝试更改为其他ID。


0
投票

您正在使用具有相同ID的'mappedBy',它仅适用于他找到的第一个ID。

尝试更改为其他ID。

© www.soinside.com 2019 - 2024. All rights reserved.