Java,Jersey,Hibernate - 如何通过休息调用传递定义为OneToMany映射的实体?

时间:2015-11-26 12:31:28

标签: java hibernate jersey dropwizard

我有两个实体 - 公司和公司办公室。公司与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关系。

0 个答案:

没有答案