Весенняя загрузка Hibernate OneToMany Null JoinColumn - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть объекты, в которых одно поле имеет отношение один ко многим.

Это выглядит так.

@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
}

Таблицы базы данных выглядят так:

компания (id, имя, короткое имя, номер клиента)

business_type (идентификатор, тип, 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 голосов
/ 19 сентября 2018
@OneToMany(mappedBy = "company", fetch = FetchType.EAGER)

По умолчанию установлено значение LAZY, и объект отношения не загружается, если явно не запрошено

0 голосов
/ 19 сентября 2018

Попробуйте добавить @JoinColumn(name="company_id") после @ManyToOne

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...