Как правильно сопоставить MonetaryAmount с помощью Hibernate? - PullRequest
0 голосов
/ 19 февраля 2019

Когда я пытаюсь сопоставить свой объект 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;
...
}

Как выполнить сопоставлениепо этому сценарию?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вы можете использовать аннотацию 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 голосов
/ 19 февраля 2019

Вы не можете сопоставить MonetaryAmount напрямую.

Вы можете попробовать сопоставить его с BigDecimal, затем в вашем коде выполнить преобразование, или вы можете попробовать реализовать пользовательский тип Hibernate (попробуйте поискать @Type или используяКонвертация в JPA (если JPA - 2,1 или выше). В этом ответе есть несколько полезных ссылок по теме.

...