Отображение @manyToOne не возвращает внешний ключ JSON - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть сопоставление для двух сущностей, ProfileGroup и User, где у пользователя есть отношение @OneToMany к ProfileGroups;

Проблема в том, что при возврате моей заявки не отображается Внешний ключ fk_user таблицы ProfileGroup в JSON-заявке для всех ProfileGroups.

ProfileGroup

    public class ProfileGroup {
...     
        @ManyToOne(fetch=FetchType.EAGER)
        @JoinColumn(name="fk_user_creator")
        @JsonBackReference
        private User userCreator;

...

Пользователь

public class User {

    @OneToMany(mappedBy="userCreator")
    @JsonManagedReference
    private List<ProfileGroup> profileGroups;

Класс ресурса:

@GetMapping
    public ResponseEntity<?> listAll(){
        List<ProfileGroup> profileGroupsReturned = profileGroupRepository.findAll();

        return !profileGroupsReturned.isEmpty() ? ResponseEntity.ok(profileGroupsReturned) : ResponseEntity.noContent().build();

И результат JSON: (НЕ ВИДИТЕ FK_USER)

[
    {
        "id": 1,
        "name": "Calango Careta",
        "description": "Cadê? cadê? Nós somos a Orquestra Camaleônica do Calango Careta!!!!!!!!",
        "founded": "2015-04-12",
        "registered": "2018-11-14",
        "active": true
    },
    {
        "id": 2,
        "name": "Tropicaos",
        "description": "",
        "founded": "2018-01-20",
        "registered": "2018-11-14",
        "active": true
    },
    {
        "id": 3,
        "name": "Capivara Brass Band",
        "description": "",
        "founded": "2016-08-24",
        "registered": "2018-11-14",
        "active": false
    }
]

Есть идеи? Что не так?

спасибо !!

1 Ответ

0 голосов
/ 14 ноября 2018

Проблема это то, что делает аннотация JsonBackReference, хотя, так как у вас есть двунаправленное отношение, если вы удалите его, вы получите бесконечный цикл при попытке сериализации ваших объектов.

Решение

  • Если вам действительно не нужно иметь двунаправленное отношение, просто избавьтесь от него, удалив одно из отношений (OnToMany или ManyToOne)
  • , вы можете поменять местамиОбратитесь к пользователю, но тогда у вас не будет сериализации группы в вашем пользователе
  • , вы можете использовать @JsonIgnore, что будет делать то же самое, что и предыдущее решение
  • , вы можете вместо этого начать использовать отдельный DTO для сериализациисериализации вашей сущности и там вы можете контролировать отношение и убедиться, что вы не нажмете бесконечный цикл сериализации
  • вы можете использовать фильтры свойств json, чтобы игнорировать свойство, которое вызовет бесконечный цикл, поэтому, например, если вы сериализуетепользователь, вы можете указать в свойстве профиля, чтобы игнорировать пользователя внутриэто так вы разорвать петлю
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...