You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by "mr.abanjo" <mr...@gmail.com> on 2007/07/23 11:23:53 UTC

Autogenerated column by DB

Hi,
sometimes, i must insert or update records in a table that has
auto-generated column (es: MS Access --> counter)
When i need to save data, first i check if i already have an object that
matck the key that come from user (maybe he has insert it manually, or maybe
is auto-generated.. so i have a null value from the form):

      dtOb = DataObjectUtils.objectForPK(dataContext, entity, compoundKey);

If the key is not specified by user, the "compoundKey" is null, and the code
above return also a null DataObject.

Now i know that is the time to create a new record:

    dtOb = dataContext.createAndRegisterNewObject(entity);

then, i insert all required values:
   dtOb.writeProperty(....)

 ... BUT NOT the auto-generated column.

When i perform a commit, Cayenne return me an error, because in the
generated INSERT query, is still present the auto-generated column, and the
value assigned is NULL.

How i can tell to cayenne to ignore the column, in way that the generated
INSERT query doesn't contains it?
There are other ways to manage this kind of operation?

Thanks
D.

Re: Autogenerated column by DB

Posted by Andrus Adamchik <an...@objectstyle.org>.
You may select "database generated" PK in the Modeler:

    http://cayenne.apache.org/doc/generated-columns.html

This works conditional on whether the JDBC driver supports this  
feature (not sure about MS Access, but SQLServer and MySQL do)

Andrus


On Jul 23, 2007, at 12:23 PM, mr.abanjo wrote:
> Hi,
> sometimes, i must insert or update records in a table that has
> auto-generated column (es: MS Access --> counter)
> When i need to save data, first i check if i already have an object  
> that
> matck the key that come from user (maybe he has insert it manually,  
> or maybe
> is auto-generated.. so i have a null value from the form):
>
>      dtOb = DataObjectUtils.objectForPK(dataContext, entity,  
> compoundKey);
>
> If the key is not specified by user, the "compoundKey" is null, and  
> the code
> above return also a null DataObject.
>
> Now i know that is the time to create a new record:
>
>    dtOb = dataContext.createAndRegisterNewObject(entity);
>
> then, i insert all required values:
>   dtOb.writeProperty(....)
>
> ... BUT NOT the auto-generated column.
>
> When i perform a commit, Cayenne return me an error, because in the
> generated INSERT query, is still present the auto-generated column,  
> and the
> value assigned is NULL.
>
> How i can tell to cayenne to ignore the column, in way that the  
> generated
> INSERT query doesn't contains it?
> There are other ways to manage this kind of operation?
>
> Thanks
> D.