You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPA多对多映射报错:mappedBy引用未知目标实体属性

解决JPA多对多映射的AnnotationException错误

错误原因

你遇到的org.hibernate.AnnotationException是因为User实体中@ManyToMany注解的mappedBy属性值错误。mappedBy需要指定维护关联关系的另一方实体(Account)中对应的集合属性名,你写的"user"并不存在,Account里的属性是users(复数形式)。

修正后的代码

Account实体(无需修改)

@ManyToMany(fetch = FetchType.LAZY,
        cascade = {
                CascadeType.PERSIST,
                CascadeType.MERGE
        })
@JoinTable(name = "account_user",
        joinColumns = { @JoinColumn(name = "account_id") },
        inverseJoinColumns = { @JoinColumn(name = "user_id") })
private Set<User> users = new HashSet<>();

User实体(修正mappedBy值)

@ManyToMany(fetch = FetchType.LAZY,
        cascade = {
                CascadeType.PERSIST,
                CascadeType.MERGE
        },
        mappedBy = "users") // 这里改成"users",对应Account里的集合属性名
@JsonIgnore
private Set<Account> accounts = new HashSet<>();

额外注意事项

  • 双向多对多中,只有维护端(Account,带@JoinTable的一方)负责关联表的增删改操作,被维护端(User,带mappedBy的一方)不能直接操作关联表。
  • @JsonIgnore用于避免JSON序列化时出现循环引用问题,这个配置是合理的。
  • 修正后启动应用,Hibernate会自动生成名为account_user的关联表,包含account_id和user_id两个外键字段。

内容的提问来源于stack exchange,提问作者jadeite1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:45:26