cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: Generated primary keys are being truncated
Date Fri, 20 Jul 2012 16:28:03 GMT

> The type in the PK column is NUMERIC with a size of 15 digits. This reflects what is
in the Oracle database. But since NUMERIC isn't BIGINT, the key is being truncated to Integer.
Is that expected behavior or have I found a bug?

Sure it is NUMERIC in DB, but you can still map it in Cayenne model as BIGINT. I am fairly
certain it will work correctly.

Having said that, we should probably add some logic to ensure that NUMERIC(N) is converted
to Long if N > (?)

Andrus


On Jul 20, 2012, at 7:18 PM, Joseph Senecal wrote:

> The type in the PK column is NUMERIC with a size of 15 digits. This reflects what is
in the Oracle database. But since NUMERIC isn't BIGINT, the key is being truncated to Integer.
Is that expected behavior or have I found a bug?
> 
> This is no longer an urgent issue. I was already overriding OraclePkGenerator, I simple
changed the code to always return a LONG (all of our primary keys are NUMERIC and at least
10 digits).
> 
> Joe
> 
> On Jul 20, 2012, at 6:16 AM, Andrus Adamchik wrote:
> 
>>> How do I specify a primary key type to be BIGINT? 
>> 
>> 
>> This is exactly what you need to do - in the Modeler change the PK column type of
DbEntity to BIGINT from INT.
>> 
>> Andrus
>> 
>> 
>> 
>> On Jul 20, 2012, at 3:19 AM, Joseph Senecal wrote:
>> 
>>> We're using Oracle and sequences, not an AUTO_PK table to generate the keys.
I've added logging into the custom code that pulls sequences, and the values are right at
that point. But when I look at the code that calls that, I find right after the call:
>>>      if (pk.getType() == Types.BIGINT) {
>>>          return Long.valueOf(value);
>>>      }
>>>      else {
>>>          // leaving it up to the user to ensure that PK does not exceed max int...
>>>          return Integer.valueOf((int) value);
>>>      }
>>> 
>>> How do I specify a primary key type to be BIGINT? Would anything break if I changed
my copy of this code to always return a Long instead of an Integer?
>>> 
>>> Joe
>>> 
>>> On Jul 19, 2012, at 5:15 PM, Aristedes Maniatis wrote:
>>> 
>>>> Look at the columns widths of the AUTO_PK table?
>>>> 
>>>> Ari
>>>> 
>>>> On 20/07/12 10:07am, Joseph Senecal wrote:
>>>>> We are using Cayenne 3.1 M3 in production. We have just discovered that
the primary keys being generated are being truncated to fit an int.
>>>>> 
>>>>> The sequence returns numbers like 5224748590. I've confirmed this by
logging the return value of LongPkRange.getNextPrimaryKey.
>>>>> 
>>>>> But the inserts are using PKs like 929781294. 5224748590 - 2^32 = 929781294.
Something is stripping off the high order bits of the primary keys.
>>>>> 
>>>>> I've checked my model, there the primary key is Defined as Number(15)
in the database, but it isn't defined as an attribute at all, so I can't specify the Java
class to use for it.
>>>>> 
>>>>> Anyone have any suggestions?
>>>>> 
>>>> 
>>>> -- 
>>>> -------------------------->
>>>> Aristedes Maniatis
>>>> GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A
>>> 
>>> 
>> 
> 
> 


Mime
View raw message