金额字段的Hibernate复合类型

8fq7wneg  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(146)

我试图将我的自定义postgres类型Map到我的hibernate实体,我也在使用Quarkus与Kotlin和panache存储库。
->我的postgres设置.

CREATE TYPE money_and_currency AS (amount integer, currency varchar(3));
CREATE TABLE example_table (
    "id" uuid,
    "amount" money_and_currency,
);

字符串
->我的Hibernate实体设置.

@Entity
@Table(name = "example_table")
class ScheduledTransactionEntity : PanacheEntityBase {
    @Id
    @GeneratedValue
    @Column(columnDefinition = "uuid", updatable = false)

    @Column(nullable = false)
    @Embedded
    var amount: MoneyAndCurrency? = null
}
@Embeddable
data class MoneyAndCurrency(val amount: Int, val currency: String)


当我尝试向数据库中插入新数据时,我遇到了这个错误:
org.hibernate.exception.SQLGrammarException:无法执行语句[错误:关系“scheduled_transactions”的列“currency”不存在
我还尝试在@Column注解中添加一个columnDefinition=“money_and_currency”,但没有任何变化。
我只需要知道如何正确地Map一个复合自定义类型使用休眠。

vlju58qv

vlju58qv1#

实体是正确的,但缺少@Struct(name =“money_and_currency”)注解,该注解告诉hibernate数据库中声明的类型是什么,hibernate应该Map到@Entity

@Table(name = "example_table")
class ScheduledTransactionEntity : PanacheEntityBase {
    @Id
    @GeneratedValue
    @Column(columnDefinition = "uuid", updatable = false)

    @Column(nullable = false)
    @Embedded
    var amount: MoneyAndCurrency? = null
}
@Embeddable
@Struct(name = "money_and_currency")
data class MoneyAndCurrency(val amount: Int, val currency: String)

字符串

相关问题