thank you Lukas,

im currently using a custom GeneratorStrategy. 
It seems when i use a custom GeneratorStrategy i can not additionally use 
the Matchers. 
I read about it in following page: 
https://www.jooq.org/doc/latest/manual/code-generation/codegen-matcherstrategy/

Quote: 
- "...Instead of specifying a strategy name, you can also specify a 
<matchers/> element as explained in the following subsections.."

So its an either or i guess? (either strategy name or matchers)

---
i have tried the matchers out and it was very easy to achieve the result i 
asked about. Really nice! 

                            .withStrategy(new Strategy()
                                    ...
                                    .withMatchers(new Matchers()
                                        .withForeignKeys(
                                            new MatchersForeignKeyType()
                                                
.withExpression("^(.*)_(.*?)(Id)?$")
                                                .withPathMethodName(new 
MatcherRule()
                                                    .withExpression("$2")
                                                )
                                                
.withPathMethodNameManyToMany(new MatcherRule()
                                                    .withExpression("$2")
                                                )
                                                
.withPathMethodNameInverse(new MatcherRule()
                                                    .withExpression("$2")
                                                )
                                        )
                                    )
                            )
---
but unfortunately i still need a Custom GeneratorStrategy for creating 
Getters/Setters correctly.
When i use the default Strategy (Strategy()) instead, then the 
Getters/Setters look somehow off to me.
For example:

i have following fields in the database:
- clientId
- userId

The code-generator would generate following Getters/Setters for them with 
the default-settings:

- setUserid / getUserid
- setClientid / getClientid

This seemed strange to me, and i fixed those with a CustomGenerator, so the 
"Id" stays as it is in the database
(only Uppercasing the first Letter of the fieldname and adding a leading 
"set" / "get")

- setUserId / getUserId
- setClientId / getClientId

In addtion to that i also have some fields in the database (liquibase) that 
are completely uppercase:
- CONTEXTS
- LABELS

The code-generator would generate following Getters/Setters for them with 
the default-settings:
- setContexts / getContexts
- setLabels / getLabels

I also would like to keep the fieldname behind the setter/getter exactly in 
uppercase like its in the database, only Uppercasing the first Letter of 
the fieldname
- setCONTEXTS / getCONTEXTS
- setLABELS / getLABELS

i also think somewhere i had problems with using Java-Reflection on the 
methods/fields and by changing it that way, 
this helped me to get java-reflection work. 

When i checked the MatcherStrategies i could not find a way to replicate 
this behavior with the Matchers. 
I tried out following which came pretty close, if the "withTransform" would 
only apply to the Source (before applying the expression/regex on it)

                                     .withFields(
                                            new MatchersFieldType()
                                                .withFieldIdentifier(new 
MatcherRule()
                                                    
.withTransform(MatcherTransformType.AS_IS))
                                                .withFieldMember(new 
MatcherRule()
                                                    
.withTransform(MatcherTransformType.AS_IS))
                                                .withFieldGetter(new 
MatcherRule()
                                                    .withExpression("$0")
                                                    
.withTransform(MatcherTransformType.UPPER_FIRST_LETTER))
                                                .withFieldSetter(new 
MatcherRule()
                                                    .withExpression("$0")
                                                    
.withTransform(MatcherTransformType.UPPER_FIRST_LETTER))
                                        )

---

still a pretty great API here!

i wonder why i need to customize the Getters/Setters so much though.
It seems to me that normally the defaults of jooq should be the best, but i 
needed to change those (as named for the reasons above)

My CustomGenerator looks like this:

public final class FkGeneratorStrategy extends DefaultGeneratorStrategy {
    @Override
    public String getJavaSetterName(Definition definition, Mode mode) {
        return "set" + definition.getOutputName().substring(0, 
1).toUpperCase() + definition.getOutputName().substring(1);
    }
    @Override
    public String getJavaGetterName(Definition definition, Mode mode) {
        return "get" + definition.getOutputName().substring(0, 
1).toUpperCase() + definition.getOutputName().substring(1);
    }
    @Override
    public String getJavaMethodName(Definition definition, Mode mode) {
        return definition.getOutputName();
    }
    @Override
    public String getJavaMemberName(Definition definition, Mode mode) {
        return definition.getOutputName();
    }
}



















lukas...@gmail.com schrieb am Dienstag, 11. Juni 2024 um 14:20:42 UTC:

> Look into these sections:
>
> - 
> https://www.jooq.org/doc/latest/manual/code-generation/codegen-generatorstrategy/
> - 
> https://www.jooq.org/doc/latest/manual/code-generation/codegen-matcherstrategy/
>
>
> On Tuesday, June 11, 2024, 'Bernd Huber' via jOOQ User Group <
> jooq...@googlegroups.com> wrote:
>
>> Im using Mariadb, and the FKs in Mariadb need to be provided with a 
>> unique FK-name.
>>
>> see:
>> - https://mariadb.com/kb/en/foreign-keys/
>> - Quote: "The symbol clause, if specified, is used in error messages and 
>> must be unique in the database."
>>
>> Sadly (because of this) the jooq-codegen generates path-expression 
>> functions on the Tables that are exactly reflecting this FK-name (which is 
>> often a bit long, and can sometimes get very long). 
>>
>> For example:
>>
>>     PRODUCT.fk_product_creatorId().USERID,
>>     PRODUCT.fk_product_editorId().USERID,
>>     PRODUCT_LANG.fk_product_lang_productId().PRODUCTID
>>
>> I know that this is a problem of Mariadb/Mysql and probably there can 
>> nothing be done from jooqs side, but i envy other databases, where the fk 
>> function name would be very short and concise. Ideally i would like to see:
>>
>>     PRODUCT.creator().USERID,
>>     PRODUCT.editor().USERID,
>>     PRODUCT_LANG.product().PRODUCTID
>>
>> Is there maybe a trick with the Jooq-Codegen Settings, where one would be 
>> able (with Regex) to replace the Path-Expression Function-Names in the 
>> generated code with such shorter variants ? 
>>
>> For me the rule could be:
>> - Take the String after the last "_" 
>> - Cut of any "Id" at the End of the String
>>
>> But maybe i just need to accept that MySql/Mariadb are causing the 
>> problem here, and i need to accept for now the long path-expressions :D 
>>
>> Its not really urgent or important, just some small thing i wonder if it 
>> could be solved.
>>
>> Greets, 
>> Bernd
>>
>> -- 
>> 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 jooq-user+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/jooq-user/d951b8e8-65f3-4ac0-86e7-876b5a6514e8n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/jooq-user/d951b8e8-65f3-4ac0-86e7-876b5a6514e8n%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 jooq-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jooq-user/43a8bf0f-57e1-4b55-99df-398421bc6128n%40googlegroups.com.

Reply via email to