Java 在关系双方非法使用mappedBy
我想部署我的应用程序,但它显示错误: org.springframework.beans.factory.BeanCreationException:创建名为“entityManagerFactory”(在com.springapp.mvc.config.HibernateConfig中定义)的bean时出错:调用init方法失败;嵌套异常为org.hibernate.AnnotationException:在关系的两侧非法使用mappedBy:com.springapp.mvc.models.User.ads 我想我搞错了: 模型用户:Java 在关系双方非法使用mappedBy,java,spring,hibernate,Java,Spring,Hibernate,我想部署我的应用程序,但它显示错误: org.springframework.beans.factory.BeanCreationException:创建名为“entityManagerFactory”(在com.springapp.mvc.config.HibernateConfig中定义)的bean时出错:调用init方法失败;嵌套异常为org.hibernate.AnnotationException:在关系的两侧非法使用mappedBy:com.springapp.mvc.models.
@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;
}
}
@实体
公共类用户实现UserDetails{
私有int-id;
私人设置广告;
私人收藏;
@身份证
@生成值
@列(name=“id”)
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
@OneToMany(fetch=FetchType.LAZY,mappedBy=“user”,cascade=CascadeType.ALL)
@其中(子句=“已删除“1”)
@杰索尼奥雷
公共集getAds(){
返回广告;
}
公共无效集合广告(集合广告){
这个.ads=ads;
}
@ManyToMany(fetch=FetchType.LAZY,cascade={CascadeType.ALL})
@杰索尼奥雷
@JoinTable(name=“favorite”,
joinColumns={@JoinColumn(name=“user_id”)},
inverseJoinColumns={@JoinColumn(name=“ad_id”)})
公共集getFavorites(){
返回收藏夹;
}
公共无效设置收藏夹(设置收藏夹){
this.favorites=收藏夹;
}
}
广告模式:
@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;
}
}
@实体
公共类广告{
私有整数id;
@身份证
@生成值
@javax.persistence.Column(name=“id”)
公共整数getId(){
返回id;
}
公共无效集合id(整数id){
this.id=id;
}
@许多酮
@JoinColumn(name=“user\u id”)
公共用户getUser(){
返回用户;
}
公共void setUser(用户){
this.user=用户;
}
@许多(mappedBy=“ads”)
公共列表GetFavoriteUsers(){
返回收藏夹用户;
}
public void setFavoriteUsers(列出FavoriteUsers){
this.favoriteUsers=FavoriteUsers;
}
}
在User.java中可能存在问题的地方,您已经为“ads”与ads.java定义了OneToMany关系
@OneToMany(fetch=FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
@Where(clause="is_deleted <> '1'")
@JsonIgnore
public Set<Ad> getAds() {
return ads;
}
@OneToMany(fetch=FetchType.LAZY,mappedBy=“user”,cascade=CascadeType.ALL)
@其中(子句=“已删除“1”)
@杰索尼奥雷
公共集getAds(){
返回广告;
}
但是,在Ads.java中,您为同一个应用程序定义了许多关系
@ManyToMany(mappedBy = "ads")
public List<User> getFavouriteUsers() {
return favouriteUsers;
}
@ManyToMany(mappedBy=“ads”)
公共列表GetFavoriteUsers(){
返回收藏夹用户;
}
确保在两个类中使用相同的映射以避免此错误因此,我需要如何更改代码,以使其正常工作。对不起,我是冬眠新手。。。。我不完全理解Hibernate为什么在User.java中需要广告和收藏夹?详细说明你的DB设计,然后我可以帮你解决这个问题谢谢,它可以工作,我将mappedBy更改为另一个值