Spring rest JPA нужно игнорировать ленивой инициализацией при создании json - PullRequest
0 голосов
/ 04 июня 2018

Я использую весенний отдых и меня интересует одна вещь.Когда я отсоединяю свой объект и возвращаю его обратно, я получаю следующую ошибку: Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: failed to lazily initialize a collection of role: kz.training.springrest.entity.Publisher.books

Я понимаю, почему.Но я хочу знать, если есть что-то, что может игнорировать это исключение и установить значение по умолчанию (ноль), например.

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@ToString
@Entity
public class Publisher {

    @Id
    @SequenceGenerator(name = "publisher_id_seq_gen", sequenceName = "publisher_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "publisher_id_seq_gen")
    private Long id;

    private String name;

    @OneToMany
    @JoinColumn(name = "publisher_id")
    private List<Book> books;

    public Publisher(Long id, String name){
        this.id = id;
        this.name = name;
    }
}


@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
public class Book {
    @Id
    @SequenceGenerator(name = "book_id_seq_gen", sequenceName = "book_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "book_id_seq_gen")
    private Long id;

    private String name;

}


@Service
public class BookService {

    @PersistenceContext
    private EntityManager entityManager;

    @Transactional
    public Publisher selectPublisher(){
        Publisher publisher = entityManager.find(Publisher.class, new Long(1));
        entityManager.detach(publisher);
        return publisher;
    }
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Если вы знаете, какие поля вы хотите игнорировать, вы можете использовать, например: @JsonIgnoreProperties({"books"}).

Но если вам нужно более общее решение, вам нужно предоставить собственный конвертер, игнорируя "hibernateLazyInitializer" и "handler", как в ссылке, предоставленной Lucas.

0 голосов
/ 04 июня 2018

Попробуйте добавить следующее в свои классы Book и Publisher, чтобы ваш сериализатор json игнорировал поля гибернации:

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})

Ref: http://www.greggbolinger.com/ignoring-hibernate-garbage-via-jsonignoreproperties/

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