Kotlin Spring Boot实体关联报错:'Many to One'属性类型不应为Account
问题解决:Kotlin Spring Boot单向多对一关联报错
错误原因
你的Account类不是合法的JPA实体类——它缺少@Entity注解,也未定义主键字段,导致JPA无法将其识别为@ManyToOne关联的目标类型,因此抛出"'Many to One' attribute type should not be 'Account'"的错误。
另外,@JoinColumn的配置也存在问题:columnDefinition用于定义列的类型或约束,而你需要指定外键列名和关联的目标列,应该用name和referencedColumnName属性。
代码修改方案
1. 将Account配置为JPA实体类
给Account添加实体注解并指定主键:
@Entity @Table(name = "accounts") // 对应数据库中的accounts表 data class Account( @Id @Column(name = "non_standard_id") // 对应数据库表的non_standard_id列 val nonStandardId: String, val name: String )
2. 修正Transaction类的关联配置
调整@JoinColumn参数,正确指定外键列和关联的目标主键列:
@Entity @Table(name = "transactions") class Transaction ( @ManyToOne @JoinColumn( name = "account_id", // transactions表中的外键列名 referencedColumnName = "non_standard_id" // Account表对应的主键列名 ) var account: Account, @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) var id: Int? = null // Kotlin推荐使用Int替代Integer )
总结
不需要修改Postgres数据库,只需修正代码,将Account配置为合法的JPA实体类,并正确设置关联注解参数即可解决问题。
内容的提问来源于stack exchange,提问作者Elliott de Launay
相关产品推荐
相关产品推荐

