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 <[email protected]> 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
> <[email protected]> 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