Spring Boot配置User与CTable一对一关联出现Hibernate注解异常如何解决
错误原因
- 关联映射的
mappedBy属性值不匹配:
一对一关联中,mappedBy的值必须和关系维护端(持有外键的实体,此处为User类)中对应的关联属性名完全一致。你在User类中定义的关联CTable的属性名为currenTable,但CTable类中@OneToOne(mappedBy = "table")指定的属性名为table,Hibernate无法在User类中找到名为table的属性,因此抛出注解异常。 - 潜在附加问题:
- User类中的CTable属性名存在拼写错误:
currenTable缺少字母t,正确应为currentTable - CTable类使用
@Table(name = "table")指定表名,table是SQL标准保留字,后续执行数据库操作时会触发SQL语法错误。
- User类中的CTable属性名存在拼写错误:
解决方案
按以下步骤修改代码即可解决:
- 修正
mappedBy属性值,和User类的关联属性名保持一致,建议顺便修正属性拼写错误 - 修改CTable的表名,避免使用SQL保留字
修正后核心代码示例
User类关联部分
// 其余代码保持不变 // 修正属性名拼写 @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "table_id", referencedColumnName = "id") private CTable currentTable;
CTable类关联及表名部分
// 修正表名,避免SQL保留字冲突 @Entity @Data @NoArgsConstructor @AllArgsConstructor @ToString @Table(name = "restaurant_table") public class CTable { // 其余属性保持不变 // mappedBy值与User类中的关联属性名完全一致 @OneToOne(mappedBy = "currentTable") private User currentUser; }
内容的提问来源于stack exchange,提问作者Mile Stanislavov
相关产品推荐
相关产品推荐

