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
相关产品推荐
相关产品推荐

