Spring Boot Hibernate OneToMany Null JoinColumn

时间:2018-09-19 18:01:53

标签: hibernate spring-boot jpa

我有一个实体,其中一个字段具有一对多关系。

看起来像这样。

@Entity
@Table(name = "company")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Company implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @NotNull
    @Column(name = "short_name", nullable = false)
    private String shortName;

    @NotNull
    @Column(name = "customer_number", nullable = false)
    private String customerNumber;

    @OneToMany(mappedBy = “company”)
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<BusinessType> businessTypes = new HashSet<>();

    … getters setters


}

@Entity
@Table(name = “business_type")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class BusinessType implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(name = "type", nullable = false)
    private BType type;

    @ManyToOne(optional = false)
    @NotNull
    @JsonIgnore
    private Company company;

    … getters setters
}

public enum BType {
    TYPE1, TYPE2, TYPE3
}

数据库表如下:

公司(编号,名称,简称,客户编号)

business_type(ID,类型,company_id)

当我请求特定的REST路径时,我得到以下JSON结构:

{
  "id" : 1,
  "name" : “Business name”,
  "shortName" : "Business short name",
  "customerNumber" : "1234",
  “businessTypes" : null
}

但是我期望以下内容:

{
  "id" : 1,
  "name" : “Business name”,
  "shortName" : "Business short name",
  "customerNumber" : "1234",
  "businessTypes" : [{
    "id" : 1,
    “type” : “TYPE1”
  }]
}

当值在数据库中时为什么businessTypes null

我想念什么?

2 个答案:

答案 0 :(得分:0)

尝试在@JoinColumn(name="company_id")之后添加@ManyToOne

答案 1 :(得分:0)

@OneToMany(mappedBy = "company", fetch = FetchType.EAGER)

默认为LAZY,除非明确请求,否则不加载关系实体