如何使用 Hibernate 正确映射 MonetaryAmount?

jan*_*lan 3 java spring jpa java-8 spring-data-jpa

当我尝试将自定义 Expenditure 对象映射到 MySQL 中的关系模型时,出现错误:

Initial SessionFactory creation failed.org.hibernate.MappingException: Could not determine type for: javax.money.MonetaryAmount, at table: Expenditure, for columns: [org.hibernate.mapping.Column(monetaryAmount)]
Run Code Online (Sandbox Code Playgroud)

我的支出类别:

@Entity
public class Expenditure implements Comparable<Expenditure> {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String description;

    private MonetaryAmount monetaryAmount;

    private LocalDate date;

    private ExpenditureType type;

    @OneToOne
    private User client;
...
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何进行映射?

And*_*cus 5

您可以使用 jpa'2@Convert注释:

@Convert(converter = MonetaryAmountConverter.class)
private MonetaryAmount monetaryAmount;
Run Code Online (Sandbox Code Playgroud)

然后像这样实现它:

@Converter
public class MonetaryAmountConverter implements AttributeConverter<MonetaryAmount, BigDecimal> {

    @Override
    public BigDecimal convertToDatabaseColumn(MonetaryAmount attribute) {...}

    @Override
    public MonetaryAmount convertToEntityAttribute(BigDecimal dbData) {...}
}
Run Code Online (Sandbox Code Playgroud)

  • 货币在哪里? (2认同)