Cayenne-Generated (Default) works for this. By default cayenne uses
sequences named "PK_<ENTITY>", so "PK_CLAIM" in your example. So if you
have existing sequences you'd like to use instead you have to override it
to use your naming scheme, by adding these classes.

import java.sql.Types;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Optional;


import org.apache.cayenne.CayenneRuntimeException;

import org.apache.cayenne.access.types.ExtendedType;

import org.apache.cayenne.access.types.ExtendedTypeFactory;

import org.apache.cayenne.access.types.ValueObjectTypeRegistry;

import org.apache.cayenne.configuration.Constants;

import org.apache.cayenne.configuration.RuntimeProperties;

import org.apache.cayenne.dba.PkGenerator;

import org.apache.cayenne.dba.QuotingStrategy;

import org.apache.cayenne.dba.TypesMapping;

import org.apache.cayenne.dba.postgres.PostgresAdapter;

import org.apache.cayenne.di.Inject;

import org.apache.cayenne.map.DbAttribute;

import org.apache.cayenne.map.DbEntity;

import org.apache.cayenne.resource.ResourceLocator;


public class EOPostgresAdapter extends PostgresAdapter {


public EOPostgresAdapter(@Inject RuntimeProperties runtimeProperties,

@Inject(Constants.SERVER_DEFAULT_TYPES_LIST) List<ExtendedType>
defaultExtendedTypes,

@Inject(Constants.SERVER_USER_TYPES_LIST) List<ExtendedType>
userExtendedTypes,

@Inject(Constants.SERVER_TYPE_FACTORIES_LIST) List<ExtendedTypeFactory>
extendedTypeFactories,

@Inject ResourceLocator resourceLocator,@Inject ValueObjectTypeRegistry
valueObjectTypeRegistry) {

super(runtimeProperties, defaultExtendedTypes, userExtendedTypes,
extendedTypeFactories, resourceLocator, valueObjectTypeRegistry);

}


@Override

protected PkGenerator createPkGenerator() {

return new EOPostgresPkGenerator(this);

}

}



import org.apache.cayenne.dba.JdbcAdapter;

import org.apache.cayenne.dba.postgres.PostgresPkGenerator;

import org.apache.cayenne.map.DbEntity;


public class EOPostgresPkGenerator extends PostgresPkGenerator {


public EOPostgresPkGenerator() {

super();

}

public EOPostgresPkGenerator(JdbcAdapter adapter) {

super(adapter);

}


@Override

protected String getSequencePrefix() {

return "";

}

@Override

protected String sequenceName(DbEntity entity) {

return super.sequenceName(entity) + "_seq";

}

}




Then, to install the overridden classes would do something like this:


ServerRuntime.builder().addConfig("cayenne-MyDomain.xml").addModule(new
Module() {

public void configure(Binder binder) {

binder.bind(PkGenerator.class).to(EOPostgresPkGenerator.class);

binder.bind(DbAdapter.class).to(EOPostgresAdapter.class);

}

}).build();



On Wed, Sep 24, 2025 at 1:31 PM Ricardo Parada <[email protected]>
wrote:

> Hello all,
>
> I haves beginner’s question.
>
> We have an Oracle database which we currently use with Apple’s Enterprise
> Objects Framework (EOF).
>
> For every table name, e.g. ORDER there is a sequence derived from the
> table name and spending “_SEQ”, e.g. CLAIM_SEQ.
>
> How is this handled in Cayenne normally? Will it derive the sequence name
> correctly?
>
> The modeler gives me three options:
>
> Cayenne-Generated (Default)
> Database-Generated
> Custom Sequence
>
> Which one would be the right one for this database?
>
> Thank you
> Ricardo Parada

Reply via email to