多对多关联懒加载导致failed to lazily initialize a collection of role: 实体类, could not initialize proxy - no Session 追加配置fetch = FetchType.EAGER解决

一篇文章需要关联很多个标签,所以他们呈一对多(多对多)的关系

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.hs.model.Article.tagModels, could not initialize proxy - no Session
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.hs.model.Article.tagModels, could not initialize proxy - no Session

正确的配置如下

@ManyToMany(cascade = CascadeType.DETACH, fetch = FetchType.EAGER)//cascade级联状态,fetch是懒加载还是立即.
    @JoinTable(
            name = "article_tag",//中间表名称,如果没有这个表,程序启动后,自动在数据库创建
            //ForeignKey指定外键,none是没有;ConstraintMode.NO_CONSTRAINT是不创建
            foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT),
            /**
             * joinColumns 是主控方给当前类指定关联,name是当前类Article的属性关联的中间表属性articleid,
             * referencedColumnName 是当前类的属性Article实体类的id
             */
            joinColumns = {
                @JoinColumn(name = "articleid", referencedColumnName = "id", nullable = false)},
            /**
             * inverseJoinColumns也就是被控方的属性, JoinColumn写中间表的属性名称,
             * referencedColumnName写TagModel的id,
             */
            inverseJoinColumns = {
                @JoinColumn(name = "tagid", referencedColumnName = "id", nullable = false
                )})
    public Set<TagModel> getTagModels() {
        return tagModels;
    }

    public void setTagModels(Set<TagModel> tagModels) {
        this.tagModels = tagModels;
    }

猜你喜欢

转载自www.cnblogs.com/jnhs/p/11400020.html