我有两个实体 - 公司和公司办公室。公司与CompanyOffice有一个OneToMany映射,CompanyOffice与Company有一个ManyToOne映射。 在创建新的公司办公室时,我应该能够在请求中提供公司ID。 我正在使用Dropwizard框架和Hibernate ORM。
Company.java
@Getter
@Setter
@Entity
@Table(name = "Company")
@JsonInclude(Include.NON_NULL)
public class Company {
@Id
@Column(name = "id")
@GenericGenerator(name = "generator", strategy = "increment")
@GeneratedValue(generator = "generator")
private long id;
@NotEmpty
@Column(name = "company_name")
@JsonProperty("company_name")
private String companyName;
@JsonIgnore
@JsonBackReference
@OneToMany(targetEntity=CompanyOffice.class, mappedBy = "company", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<CompanyOffice> companyOffices;
@JsonCreator
public Company(@JsonProperty("company_name") String companyName) {
this.companyName = companyName;
}
}
CompanyOffice.java
@Getter
@Setter
@Entity
@Table(name = "CompanyOffice")
@JsonInclude(Include.NON_NULL)
@NoArgsConstructor
@AllArgsConstructor
public class CompanyOffice {
@Id
@Column(name = "id")
@GenericGenerator(name = "generator", strategy = "increment")
@GeneratedValue(generator = "generator")
private long id;
@NotEmpty
@Column(name = "office_name")
@JsonProperty("office_name")
private String officeName;
@Column(name = "created_at")
@CreationTimestamp
private Date createdAt;
@Column(name = "updated_at")
@UpdateTimestamp
private Date updatedAt;
@JsonIgnore
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "company_id", nullable = false)
private Company company;
@Transient
@JsonProperty("company_id")
private long companyId;
public CompanyOffice(String officeName, Company company) {
this.companyId = company.getId();
this.company = company;
this.officeName = officeName;
}
}
CompanyOfficeResource.java
@POST
@Timed
@Path("add")
@UnitOfWork
public Long addCompanyOffice(CompanyOffice companyOffice) {
Company parentCompany = companyOffice.getCompany();
String officeName = companyOffice.getOfficeName();
CompanyOffice newCompanyOffice = companyOfficeDAO.createCompanyOffice(
new CompanyOffice(officeName, parentCompany)
);
return newCompanyOffice.getId();
}
通过休息呼叫发送的JSON请求: { &#34; company_id&#34;:1, &#34; office_name&#34;:&#34; PW&#34; }
DB中存在ID为1的公司。我该怎么办呢?什么是正确的方法?
为了进一步简化, 在创建对象B的新实体的请求中传递对象A的实体的最佳方法是什么?对象A与对象B具有OneToMany关系,对象B与对象A具有ManyToOne关系。