Looking into this now. I've commented on the issue here:
https://github.com/jOOQ/jOOQ/issues/18793#issuecomment-3311500360

Seems like an easy fix for the next set of patch versions.

Thanks for the reproducer!

On Fri, Sep 12, 2025 at 12:53 PM Lukas Eder <[email protected]> wrote:

> Hi Dominik,
>
> Sorry for the delay. I'll get to this issue soon.
>
> Best,
> Lukas
>
> On Sat, Aug 30, 2025 at 7:08 PM Dominik Hirt <[email protected]>
> wrote:
>
>> Today, I took another closer look at the problem I had already reported
>> in https://github.com/jOOQ/jOOQ/issues/18793.
>> The issue is, that when using a UDT in Postgresql, the jOOQ code
>> generator creates record classes with compile errors.
>>
>> Our workaround so far has been to correct the incorrectly generated
>> record classes using Linux CLI sed. However, this now requires adjustments
>> to the Docker image for the CI pipeline and much more, so today I took the
>> trouble to build an MVE with jbang so that it can be reproduced quickly.
>> (see attachment jbang-udt.zip)
>>
>> Here are the steps to reproduce:
>>
>> 1) We create a UDT in PostgreSQL for a monetary amount consisting of
>> amount and currency, using that UDT for a column within the *invoice*
>> table and insert a value.
>>
>> create type monetary_value as (
>>   amount numeric(14,2),
>>   currency varchar(4)
>> );
>>
>> create table invoice (
>>     id int not null primary key generated by default as identity,
>>     amount monetary_value
>> );
>>
>> insert into invoice (amount) values ('(42,EUR)');
>>
>> 2) The jOOQ code generator is now configured and started for this
>> database:
>>
>> <generator>
>>         <database>
>>             <inputSchema>public</inputSchema>
>>             <includeUDTs>true</includeUDTs>
>>             <forcedTypes>
>>                 <forcedType>
>>                     <userType>javax.money.MonetaryAmount</userType>
>>
>> <converter>de.todo42.test.MonetaryValueConverter</converter>
>>                     <includeExpression>amount</includeExpression>
>>                     <objectType>COLUMN</objectType>
>>                 </forcedType>
>>             </forcedTypes>
>>         </database>
>>         <generate>
>>             <pojos>true</pojos>
>>         </generate>
>>         <target>
>>             <packageName>de.todo42.test</packageName>
>>             <directory>.</directory>
>>         </target>
>>     </generator>
>>
>> 3) The code generator now generates, among other things, the
>> InvoiceRecord.java for the INVOICE table.
>> This class has the following as its last method:
>>
>>    /**
>>      * Create a detached, initialised InvoiceRecord
>>      */
>>     public InvoiceRecord(de.todo42.test.tables.pojos.Invoice value) {
>>         super(Invoice.INVOICE);
>>
>>         if (value != null) {
>>             setId(value.getId());
>>             setAmount(value.getAmount() == null ? null : new
>> MonetaryAmount(value.getAmount()));
>>             resetTouchedOnNotNull();
>>         }
>>     }
>>
>> There is now a compile error here because the used constructor
>>
>>     new MonetaryAmount(value.getAmount()));
>>
>> does not exist.
>>
>> 4) As can be seen above, POJO generation was enabled. These are essential
>> for our project. However, if this is deactivated in the configuration by
>>
>> <pojos>false</pojos>
>>
>>
>> then this incorrect method is NOT generated and no compile errors occur.
>>
>>
>> Our workaround now consists of using a sed call to replace the line
>>
>>     setAmount(value.getAmount() == null ? null : new
>> MonetaryAmount(value.getAmount()));
>>
>> with the line
>>
>> setAmount(value.getAmount());
>>
>>  This also corresponds to the generated assignments for all other table
>> columns/class attributes that are not UDTs.
>>
>> However, the generation of POJOs is essential for us and we cannot do
>> without it.
>>
>> How can I generate record classes without compile errors, even with POJO
>> generation enabled ?
>>
>> Kind regards
>> Dominik
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "jOOQ User Group" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion visit
>> https://groups.google.com/d/msgid/jooq-user/57186e6a-31dc-46e5-9b2d-7312afc752c9n%40googlegroups.com
>> <https://groups.google.com/d/msgid/jooq-user/57186e6a-31dc-46e5-9b2d-7312afc752c9n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/jooq-user/CAB4ELO6-1YK0X7Xbxq_M9FgZ8WoWG8Bw0iuiGXn2t8VwbX0cGQ%40mail.gmail.com.

Reply via email to