compile error in generated code
For my latest project I slicely differ my JOOQ maven codegen setup:
1) I create a UDT for my Postgresql database:
CREATE TYPE monetary_value AS (
amount NUMERIC,
currency VARCHAR
);
2) Using this type for price columns
create table inventory (
name text,
price_amount monetary_value
)
3) using JOOQ to force a type conversion to Java Money API MoneyAmount
<forcedType>
<userType>javax.money.MonetaryAmount</userType>
<converter>de.hub28.MonetaryValueConverter</converter>
<includeExpression>.*_amount</includeExpression>
<objectType>COLUMN</objectType>
</forcedType>
with a usual implementation of
org.jooq.Converter.
Due to the UDT from above and
<includeUDTs>true</includeUDTs> I can base the converter implementaion on the generated MonetaryValueRecord.
public class SimpleMonetaryValueConverter implements Converter<MonetaryValueRecord, MonetaryAmount> {
@Override
public MonetaryAmount from(MonetaryValueRecord databaseObject) {
try {
BigDecimal amount = databaseObject.getAmount() != null ? databaseObject.getAmount() : BigDecimal.ZERO;
String currencyStr = databaseObject.getCurrency();
return Money.of(amount, currencyStr);
} catch (Exception e) {
throw new RuntimeException("Failed to parse monetary value: " + databaseObject, e);
}
}
But with this setup, there is a compile error in the JOOQ generated InventoryRecord.java.
/**
* Create a detached, initialised InventoryRecord
*/
public InventoryRecord(de.hub28.generated.tables.pojos.Inventory value) {
super(Inventory.INVENTORY);
if (value != null) {
setName(value.getName());
setPriceAmount(value.getPriceAmount() == null ? null : new MonetaryAmount(value.getPriceAmount())); // <-- wrong constructor
resetTouchedOnNotNull();
}
}
}Surprisingly, that in other projects I successfully use
<forcedType> to convert into javax.money.Money.
In those setups, I do not use a UDT. I use a numeric column only, without any currency column due to pure EUR projects.
In this cases, the generated JOOQ record reads
```
setPriceAmount(value.getPriceAmount())
```
How can configure my project setup in order to use the money_value UDT DB column and convert those values into javax.money.MonetaryAmount ?
Kind regards
Dominik