我想部署我的应用程序,但它显示错误:
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/