【发布时间】:2020-02-19 00:55:05
【问题描述】:
我有一个奇怪的问题。我有实体公司、分公司和地址。 公司有分公司名单,每个分公司都有地址。 我试图坚持在地址实体之前不存在的分支,但地址是用空列坚持的。
@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;
}
这就是效果……
调试器...
有什么问题?你能帮帮我吗?
【问题讨论】:
-
查看调试器中的对象标识符
Branch@...和Address@....。地址应与 branch.address 相同的对象,并且 address.branch.address 应与 Address 相同的对象。您的映射代码可能在某处搞砸了 -
我发现 jpa 存在不存在地址的持久不存在分支的问题。所以我不得不坚持 Branch 并在设置地址之后再次坚持 Branch。
标签: java database spring jpa cascade