Ленивая загрузка не работает в весенних данных jpa двунаправленное отображение один-ко-многим

Spring data jpa project, где у меня есть два объекта с одним или несколькими двунаправленными отображениями, я пытаюсь лениво обрабатывать объекты, но в ответ это похоже на нетерпеливую выборку.

отклик:

[ { "id": 1, "title": "киут", "postComments": [ { "id": 1, "обзор": "acsad", «пост»: 1 }, { "id": 2, "обзор": "cadfs", «пост»: 1 } ] }, { "id": 2, "title": "afhv", "postComments": [ { "id": 3, "обзор": "вдв", «пост»: 2 }, { "id": 4, "обзор": "acs", «пост»: 2 } ] } ]

The classes:



     @Entity
        @Table(name = "post_comment")
        @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property = "id",scope = PostComment.class) 
            public class PostComment implements Serializable{

                private static final long serialVersionUID = 1L;

                @Id
                @Column(name = "id")
                @GeneratedValue
                private Long id;

                @Column(name = "review")
                private String review;

                @ManyToOne(fetch = FetchType.LAZY)
                @JoinColumn(name = "post_id",nullable = false)
                private Post post;

                public Long getId() {
                    return id;
                }

                public void setId(Long id) {
                    this.id = id;
                }

                public String getReview() {
                    return review;
                }

                public void setReview(String review) {
                    this.review = review;
                }


                public Post getPost() {
                    return post;
                }

                public void setPost(Post post) {
                    this.post = post;
                }

                @Override
                public int hashCode() {
                    final int prime = 31;
                    int result = 1;
                    result = prime * result + ((id == null) ? 0 : id.hashCode());
                    return result;
                }

                @Override
                public boolean equals(Object obj) {
                    if (this == obj)
                        return true;
                    if (obj == null)
                        return false;
                    if (getClass() != obj.getClass())
                        return false;
                    PostComment other = (PostComment) obj;
                    if (id == null) {
                        if (other.id != null)
                            return false;
                    } else if (!id.equals(other.id))
                        return false;
                    return true;
                }



            }
        package com.srinivas.assetz.domain;

        import java.io.Serializable;
        import java.util.List;

        import javax.persistence.CascadeType;
        import javax.persistence.Column;
        import javax.persistence.Entity;
        import javax.persistence.GeneratedValue;
        import javax.persistence.GenerationType;
        import javax.persistence.Id;
        import javax.persistence.OneToMany;
        import javax.persistence.Table;

        import com.fasterxml.jackson.annotation.JsonIdentityInfo;
        import com.fasterxml.jackson.annotation.ObjectIdGenerators;

        @Entity
        @Table(name = "post")
        @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property = "id",scope = Post.class) 
        public class Post implements Serializable{

            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            @Id
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            @Column(name = "id")
            private int id;

            @Column(name = "title")
            private String title;

            @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.LAZY)
            private List<PostComment> postComments;


            public int getId() {
                return id;
            }

            public void setId(int id) {
                this.id = id;
            }

            public String getTitle() {
                return title;
            }

            public void setTitle(String title) {
                this.title = title;
            }


            public List<PostComment> getPostComments() {
                return postComments;
            }

            public void setPostComments(List<PostComment> postComments) {
                this.postComments = postComments;
            }

            @Override
            public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + id;
                return result;
            }

            @Override
            public boolean equals(Object obj) {
                if (this == obj)
                    return true;
                if (obj == null)
                    return false;
                if (getClass() != obj.getClass())
                    return false;
                Post other = (Post) obj;
                if (id != other.id)
                    return false;
                return true;
            }





        }

    @Repository
    public interface PostRepository extends CrudRepository<Post, Integer> {

    }
    public interface PostService {
        public Iterable<Post> getAllPosts();    
    }
@Service

public class PostServiceImpl implements PostService {

    @Autowired
    PostRepository postRepository;

    @Override
    @Transactional
    public Iterable<Post> getAllPosts() {
        // TODO Auto-generated method stub

        return postRepository.findAll();
    }

}

Отправьте вам класс DAO или класс обслуживания, который выполняет запрос.

Moodi 11.12.2018 21:23

@Moodi, я добавил услугу, о которой вы просили.

Srinivas Chinnam 12.12.2018 16:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
779
1

Ответы 1

В этой части у вас есть только ленивый комментарий сущности PostComment:

 @ManyToOne(fetch = FetchType.LAZY)
 @JoinColumn(name = "post_id",nullable = false)
 private Post post;

А вот ваша сущность Post такая (не поленитесь там):

@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
private List<PostComment> postComments;

И по этой причине, когда вы получаете сообщение, вы также получаете комментарий. Итак, чтобы избежать этого, включите ленивый объект Post, что-то вроде этого:

@OneToMany(fetch=FetchType.LAZY, mappedBy = "post", cascade = CascadeType.ALL, 
orphanRemoval = true)
private List<PostComment> postComments;
FetchType.LAZY - это значение по умолчанию для одной выборки в отношении @OneToMany. См. docs.oracle.com/javaee/6/api/javax/persistence/OneToMany.htm‌ ldocs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/…
Serg Vasylchak 11.12.2018 20:52

Да, вы правы, но у меня есть проект с Spring, и я должен указать Lazy, иначе система будет действовать как Eager

Andres Rincon 11.12.2018 21:21

@SergVasylchak Я добавил выборку на стороне сообщения, но результат такой же

Srinivas Chinnam 12.12.2018 16:53

Другие вопросы по теме