java - 在关系双方非法使用mappedBy

标签 java spring hibernate

我想部署我的应用程序,但它显示错误:

org.springframework.beans.factory.BeanCreationException:创建在 com.springapp.mvc.config.HibernateConfig 中定义的名为“entityManagerFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是org.hibernate.AnnotationException:在关系双方非法使用mappedBy:com.springapp.mvc.models.User.ads

我认为我错误地映射了某些内容:

模型用户:

      @Entity
            public class User implements UserDetails {
               private int id;
               private Set<Ad> ads;
               private Set<Ad> favourites;

               @Id
               @GeneratedValue
               @Column(name = "id")
               public int getId() {
                  return id;
               }

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

                 @OneToMany(fetch=FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
            @Where(clause="is_deleted <> '1'")
            @JsonIgnore
            public Set<Ad> getAds() {
                return ads;
            }

            public void setAds(Set<Ad> ads) {
                this.ads = ads;
            }

            @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
            @JsonIgnore
            @JoinTable(name= "favourite",
                joinColumns = {@JoinColumn(name="user_id")},
                inverseJoinColumns = {@JoinColumn(name="ad_id")})
            public Set<Ad> getFavourites() {
                return favourites;
            }

            public void setFavourites(Set<Ad> favourites) {
                this.favourites = favourites;
            }
    }

广告模式:

     @Entity
        public class Ad {

        private Integer id;

        @Id
        @GeneratedValue
        @javax.persistence.Column(name = "id")
        public Integer getId() {
            return id;
        }

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

        @ManyToOne
        @JoinColumn(name="user_id")
        public User getUser() {
            return user;
        }

        public void setUser(User user) {
            this.user = user;
        }

        @ManyToMany(mappedBy = "ads")
        public List<User> getFavouriteUsers() {
            return favouriteUsers;
        }

        public void setFavouriteUsers(List<User> favouriteUsers) {
            this.favouriteUsers = favouriteUsers;
        }
}

哪里可能有问题

最佳答案

在 User.java 中,您已使用 Ads.java 为“广告”定义了 OneToMany 关系

        @OneToMany(fetch=FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
        @Where(clause="is_deleted <> '1'")
        @JsonIgnore
        public Set<Ad> getAds() {
            return ads;
        }

但是,在 Ads.java 中,您已经定义了相同的 ManyToMany 关系

    @ManyToMany(mappedBy = "ads")
    public List<User> getFavouriteUsers() {
        return favouriteUsers;
    }

确保在两个类中使用相同的映射以避免此错误

关于java - 在关系双方非法使用mappedBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32557430/

相关文章:

spring - getcurrentsession 中的空指针异常

java - 当 Spring 属性无效时提供更好的日志记录

java - 在 MySQL 中处理 null

java - Java 中的对象树导航语言

java - 需要帮助来反编译 jar 文件、编辑类并保存为 jar 文件

java - 在申请强制关闭或互联网不可用时处理 GCM 注销

java - XSD 架构元素可以是两种类型之一

java - Spring Cloud 流卡夫卡 : Duplicate @StreamListener mapping for 'input'

java - Spring 。在 XML 上的根元素之后添加子元素

java - Hibernate总是得到java.lang.IllegalArgumentException : Can not set java. lang.Long字段