मेरे पास आलसी इनिट फ़ील्ड टिप्पणियों के साथ एक क्लास पोस्ट है:

@Entity
@Table(name = "POSTS")
public class Post {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "post_id",
            unique = true, nullable = false)
    @JsonView(Views.Public.class)
    private Integer postId;

    @Column(name = "POST_BODY", columnDefinition = "text")
    @JsonView(Views.Public.class)
    private String postBody;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "USERNAME")
    private User user;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "post", fetch = FetchType.LAZY)
    private Set<PostComment> comments = new HashSet<>();
}

जैसा कि मैंने हाइबरनेट दस्तावेज़ों से सीखा है यदि आलसी प्रारंभिकता के कारण कुछ प्रारंभ नहीं किया गया है, तो यदि आप इसकी गेटर विधि को कॉल करते हैं तो इसे प्रारंभ किया जाना चाहिए, लेकिन जब मुझे मेरी पोस्ट मिलती है और टिप्पणियों के लिए गेटर विधि को कॉल करने का प्रयास करता है, तो मुझे अपवाद मिलता है।

@GetMapping(path = {"/post/{id}"})
    public ModelAndView showSpecificPost(@PathVariable(value = "id") Integer id) {
        User currentUser = userService.findByUserName(auth.getName());
        Post post = postService.getPostById(id);
        logger.info(post.getComments().size());
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("postTemplates/specificPost");

        return modelAndView;
    }
0
Ars 30 मई 2019, 16:00

1 उत्तर

सबसे बढ़िया उत्तर

सबसे अधिक संभावना है कि लेन-देन इस पद्धति पर है:

Post post = postService.getPostById(id);

फिर आप कोशिश करें:

logger.info(post.getComments().size());

जो इस बिंदु पर बंद लेन-देन से बाहर है और Post इस बिंदु पर एक अलग इकाई है।

आपके लिए विकल्पों में से एक @Transactional(readOnly = true) के साथ नियंत्रक अनुरोध-मानचित्रण विधि की व्याख्या करना होगा।

1
Maciej Kowalski 30 मई 2019, 13:03