cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Emanuele Maiarelli <emanu...@mengozzi.com>
Subject Postgress autogenerated keys.
Date Wed, 28 Oct 2009 23:55:56 GMT
I'm using cayenne 3 with postgresql 8.2.14, for instance i've a table 
structured like that

CREATE TABLE documenti
(
  doc_pk bigserial NOT NULL,
  doc_desc character varying(255),
  doc_mine character varying(255),
  doc_prot_fk bigint,
  doc_self_fk bigint,
  doc_prot_nr bigint,
  doc_folder_fk bigint,
  doc_uid character varying(255),
  doc_prot_anno bigint,
  doc_unsubmitted boolean,
  CONSTRAINT "DOCUMENTI_pkey" PRIMARY KEY (doc_pk),
  CONSTRAINT "DOCUMENTI_DOC_PROT_FK_fkey" FOREIGN KEY (doc_prot_fk)
      REFERENCES protocolli (prot_pk) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT documenti_doc_folder_fk_fkey FOREIGN KEY (doc_folder_fk)
      REFERENCES folders (fold_pk) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
 and a sequnce for generating Pks

CREATE SEQUENCE documenti_doc_pk_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 20
  CACHE 1;

My question is what's the best pratice to ensure correts Pks being 
generated from sequence:

actually entity is configured as follow

    <db-entity name="documenti" schema="public">
        <db-attribute name="doc_desc" type="VARCHAR" length="255"/>
        <db-attribute name="doc_folder_fk" type="BIGINT" length="8"/>
        <db-attribute name="doc_mine" type="VARCHAR" length="255"/>
        <db-attribute name="doc_pk" type="BIGINT" isPrimaryKey="true" 
isMandatory="true" length="8"/>
        <db-attribute name="doc_prot_anno" type="BIGINT" length="8"/>
        <db-attribute name="doc_prot_fk" type="BIGINT" length="8"/>
        <db-attribute name="doc_prot_nr" type="BIGINT" length="8"/>
        <db-attribute name="doc_self_fk" type="BIGINT" length="8"/>
        <db-attribute name="doc_uid" type="VARCHAR" length="255"/>
        <db-attribute name="doc_unsubmitted" type="BIT" length="1"/>
        <db-key-generator>
            <db-generator-type>ORACLE</db-generator-type>
            <db-generator-name>documenti_doc_pk_seq</db-generator-name>
            <db-key-cache-size>1</db-key-cache-size>
        </db-key-generator>
    </db-entity>

but since i missed initially to specify 
<db-key-cache-size>1</db-key-cache-size> i got duplicated keys problems.

Specifing <db-key-cache-size>1</db-key-cache-size> seems like solve the 
problem. Is this correct?


Or should i change postgresql to automatically create the pk i mean, 
changing doc_pk like that  "doc_pk bigserial NOT NULL DEFAULT 
nextval('documenti_doc_pk_seq')

and setting
<db-attribute name="doc_pk" type="BIGINT" isPrimaryKey="true" 
isGenerated="true" isMandatory="true" length="8"/>





 

Mime
View raw message