thanks for getting me on the right track.

I've confirmed that my custom pk generator is working because I overrode the 
method:
@Override
protected long getLongPrimaryKey(Statement statement, String entityName) throws 
SQLException {
return super.getLongPrimaryKey(statement, entityName);
}

and I've confirmed in the debugger that that particular method is being called 
in my custom pk generator when i create a new entity.

However, the following two methods in my custom pk generator aren't being 
called at all:
@Override
protected String pkUpdateString(String entName) {
return "update EO_PK_TABLE SET PK = PK+1 where NAME = '" + entName + "'";
}

@Override
protected String pkSelectString(String entName) {
return "SELECT PK FROM eo_pk_table WHERE NAME = '" + entName + "'";
}


I think I can probably do everything I need to do in getLongPrimaryKey if I 
need to, but it would be nice to use those two sql string methods.

I'll work on it a bit more this weekend.

Rob


> On 1 May 2025, at 02:42, Nikita Timofeev <ntimof...@objectstyle.com> wrote:
> 
> Hi Robert,
> 
> There's no configuration for that, but you could define your own
> PkGenerator easily. Here's how to do it if you are using MySQL:
> 
> ServerModule.contributePkGenerators(binder)
>        .put(MySQLAdapter.class.getName(), MyPkGenerator.class)
> 
> And in the custom PK generator you'll need to redefine all methods with the
> table name hardcoded (and you need to use), something like this:
> 
> public class MyPkGenerator extends MySQLPkGenerator {
>    ...
>    @Override
>    protected String pkSelectString(String entName) {
>        return "SELECT NEXT_ID FROM eo_pk_table WHERE TABLE_NAME = '" +
> entName + '\'';
>    }
>    ...
> }
> 
> Also judging by the table name you are converting from the WebObjects, and
> if you'll need to keep Cayenne and WebObjects together you'll probably need
> to sync Pk generation logic, not only the table name.
> 
> As for the Modeler, I don't think there's a simple way to do this. But if
> you are trying to use Modeler as an SQL generator, it's not generally
> recommended, it's primarily for dev purposes only.
> 
> On Thu, May 1, 2025 at 12:29 AM Robert A. Decker
> <dec...@robdecker.com.invalid> wrote:
> 
>> I'm trying to set the name of the auto_pk_support table to be eo_pk_table
>> instead.
>> 
>> Is it possible to do this in code, similar to below with the
>> addModule/ServerModule section (which doesn't work because the key isn't
>> correct). I don't see anything I can use here:
>> 
>> https://cayenne.apache.org/docs/4.1/cayenne-guide/#appendix-a-configuration-properties
>> 
>> Also, is it possible to do in the modeller as well?
>> 
>> thanks,
>> Rob
>> 
>> 
>> cayenneRuntime = ServerRuntime.builder()
>>        .addConfig("cayenne-project.xml")
>>        .addModule(binder ->
>>                ServerModule.contributeProperties(binder)
>>                        .put("cayenne.PkGenerator.GeneratedKeyTableName",
>> "eo_pk_table"))
>>        .dataSource(DataSourceBuilder
>>                .url("jdbc:mysql://
>> 127.0.0.1:3306/sms?useSSL=false&serverTimezone=UTC")
>>                .driver("com.mysql.cj.jdbc.Driver")
>>                .userName("sms")
>>                .password("").build())
>>                .build();
>> 
>> 
>> 
>> 
> 
> -- 
> Best regards,
> Nikita Timofeev

Reply via email to