Как игнорировать отношение @OneToMany для GET-запроса? - PullRequest
0 голосов
/ 17 января 2020

У меня есть объект под названием Ресторан, и у него есть Набор объектов другого класса:

@Entity
@Table(name = "restaurants")
public class Restaurant extends AbstractNamedEntity implements Serializable {

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "restaurant")
    private Set<Meal> meals = Collections.emptySet();
    //getters, setters and other variables
}

Класс "Еда" имеет отношение @ManyToOne к "Ресторану".

У меня есть репозиторий Spring JPA:

@Repository
public interface RestaurantRepository extends CrudRepository<Restaurant, Integer> {
}

Когда я использую метод findById() - я получаю ресторан с едой enter image description here

Мне нужно получить ресторан без каких-либо блюд. Набор нельзя брать из репозитория - его следует игнорировать. Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Вы можете добавить @JsonIgnore аннотацию к атрибуту или создать DTO, который содержит только те атрибуты, которые вам нужны из модели.

1 голос
/ 17 января 2020

Заданные данные не будут приняты, так как ваша конфигурация:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "restaurant")

Ленивый означает, что данные не будут выбраны, если вы не запросите их явно.

Когда вы вычисляете выражение и нажмите на питание, он выполнит запрос (потому что он вызовет метод get), который вернет данные. Вы можете попробовать это, если вы включите флаг show_ sql, используя:

spring.jpa.show-sql=true

Дополнительно, попробуйте вернуть данные без их отладки.

Кроме того, используйте DTO для возврата данных клиенту и не используйте @JsonIgnore, это плохая практика (это быстрое решение)

...