Spring Data JPA @OneToMany - PullRequest
       13

Spring Data JPA @OneToMany

0 голосов
/ 17 декабря 2018

Я проектирую модель БД:

@Entity
@Table(name="t_urna")
public class Urna implements Serializable {


    @OneToMany(mappedBy = "urna", 
               cascade = CascadeType.ALL, 
               orphanRemoval = true, fetch = FetchType.EAGER)
    @JsonIgnore
    private Set<Vot> vots = new HashSet<>();

..
}


@Entity
@Table(name="t_vot")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Vot implements Serializable {

   @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "urna_id")
    @JsonIgnore
    Urna urna;

}

, и мне было интересно, может ли установка FetchType.EAGER в обоих классах вызвать проблему, такую ​​как бесконечный цикл или некоторый стековый поток ....и если это хорошая практика

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Нет, у вас не будет бесконечного цикла.

Я не думаю, что на этом уровне есть хорошие или плохие практики.Иногда лучше использовать LAZY, потому что это мешает вам загружать ненужные вам объекты.Иногда лучше использовать EAGER, так как он будет препятствовать запуску нескольких запросов Hibernate, если вам нужны объекты.

При программировании микросервисов я всегда использую EAGER (и т. Е. Ограниченный контекстный агрегат).Для монолита, может быть, ленивый мудрее.

0 голосов
/ 17 декабря 2018

Тип выборки по умолчанию для @ManyToOne в любом случае EAGER.Если вы установите его на @OneToMany, это не должно привести к переполнению стека.

Если это хорошая практика?Я бы не сказал «да», но бывают случаи, когда вам нужно выбрать также связанные объекты.Но я бы сказал, что всегда лучше указывать граф сущностей

...