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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:52:23