Ленивая загрузка не работает в весенние данные JPA один ко многим двунаправленным отображением - PullRequest
0 голосов
/ 11 декабря 2018

весенний проект данных jpa, где у меня есть две сущности с двунаправленным отображением от одного ко многим, я пытаюсь лениво показывать объекты, но в ответ похож на нетерпеливую выборку.

ответ:

[{"id": 1, "title": "kyoot", "postComments": [{"id": 1, "review": "acsad", "post": 1}, {"id": 2, "review":" cadfs "," post ": 1}]}, {" id ": 2," title ":" afhv "," postComments ": [{" id ": 3," review ":" vdv ","post": 2}, {"id": 4, "review": "acs", "post": 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();
    }

}

1 Ответ

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

У вас только ленивый объект 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, вы также получаете PostComment.Таким образом, чтобы избежать этого, включите ленивый на сущности Post, что-то вроде этого:

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