如何使用Hibernate正确映射MonetaryAmount?

问题描述 投票:0回答:2

当我尝试将我的自定义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)]

我的支出课程:

@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;
...
}

如何在此方案中执行映射?

hibernate hibernate-mapping
2个回答
1
投票

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

@Convert(converter = MonetaryAmountConverter.class)
private MonetaryAmount monetaryAmount;

然后像这样实现它:

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

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

    @Override
    public MonetaryAmount convertToEntityAttribute(BigDecimal dbData) {...}
}

0
投票

您无法直接映射MonetaryAmount。

您可以尝试将其映射到BigDecimal,然后在您的代码中执行转换,或者您可以尝试实现Hibernate自定义类型(尝试搜索@Type,或使用JPA转换(如果JPA是2.1或更高)。这个answer有一些很好的链接就此主题而言。

© www.soinside.com 2019 - 2024. All rights reserved.