Hi,

You shouldn't inject an adapter in the constructor, it's not in DI
container directly. Try to define only default constructor:

public PcExpressPosUUIDPkGenerator() {
    super();
}

On Tue, Jan 28, 2020 at 4:28 AM Juan Manuel Diaz Lara
<jmdia...@yahoo.com.invalid> wrote:
>
> My DB is postgres, how can I contribute/replace de PostgresPkGenerator with 
> my own implementation to genera UUID's as PK's:
> public class PcExpressPosUUIDPkGenerator extends PostgresPkGenerator {
>     public PcExpressPosUUIDPkGenerator(@Inject PostgresAdapter adapter) {
>         super(adapter);
>     }
>
>     @Override
>     public Object generatePk(DataNode arg0, DbAttribute attribute) throws 
> Exception {
>         if (    attribute.getType() == java.sql.Types.OTHER)
>             return java.util.UUID.randomUUID();
>         else if (attribute.getType() == java.sql.Types.VARCHAR)
>             return java.util.UUID.randomUUID().toString();
>         else
>             return super.generatePk(arg0, attribute);
>     }
> }
> I tryied this in a new Module:
>
> ServerModule.contributePkGenerators(binder).put(PostgresAdapter.class.getName(),
>  PcExpressPosUUIDPkGenerator.class);
> But when trying to create my first context get this error:
> org.apache.cayenne.di.DIRuntimeException: DI container has no binding for key 
> <BindingKey: org.apache.cayenne.dba.postgres.PostgresAdapter>
>
> Atte. Juan Manuel Díaz Lara



-- 
Best regards,
Nikita Timofeev

Reply via email to