All

I've changed my Dictionary to use sequenceSQL, sequenceNameSQL and 
sequenceSchemaSQL (ripping off DB2Dictionary, thanks!) but I have problems 
running the unit tests when specifying openjpa.Sequence=native as the mapping 
tool keeps trying to create the sequence OPENJPA_SEQUENCE, even when it already 
exists.  

I've tried stepping through a unit test and it seems that getSequences finds 
OPENJPA_SEQUENCE, so I can't see why it's trying to recreate it.  It does seem 
to store the sequence name as "openjpa_sequence                " in the Schema 
object - is that expected, or should there be some trimming?

Alan 

-----Original Message-----
From: Alan Raison
Sent: 28 July 2009 10:20
To: [email protected]
Subject: RE: Generators

Kevin

It is true that a field can override the default generation strategy to use 
sequences; for example I have the following sequence generator defined:
@SequenceGenerator(name="myseq",sequenceName="my_seq",initialValue=5)

And a field using this generator:
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="myseq")
    public int getColumn() { ... }

This works correctly.  However, given the field:

    @Id
    @GeneratedValue
    public int getId() { ... }

This will use the OPENJPA_SEQUENCE_TABLE unless
a) I specify (strategy=GenerationType.SEQUENCE), or
b) I set openjpa.Sequence=native

My dictionary does not set sequenceSQL, sequenceSchemaSQL or sequenceNameSQL, 
since it wasn't clear what these should return, but I have set 
nextSequenceQuery and overridden getSequencesSQL(String, String)

Is the lack of these attributes the cause for GenerationType.TABLE being the 
default?

Alan 

-----Original Message-----
From: Kevin Sutter [mailto:[email protected]] 
Sent: 27 July 2009 19:22
To: [email protected]
Subject: Re: Generators

Hi Alan,
I wonder if our documentation is in sync with the code...  The default value
for openjpa.Sequence is table.  But, I believe we override that if certain
attributes within the Dictionary are set.  For example, sequenceSQL,
sequenceSchemaSQL, and sequenceNameSQL are attributes that get set by data
dictionaries that support Sequences natively.  For example, DB2 and Oracle
are two databases that support native sequences.  And, as long as the
GeneratedValue Strategy is set to SEQUENCE, I believe this kicks in without
having to set openjpa.Sequence to "native".

Since you are looking to create a new dictionary for Ingres, this would
explain why you have to set the openjpa.Sequence property to get the desired
effect.

Can you do any experimentation to verify this?  We may need to update our
documentation or javadoc to make this clearer.

Kevin

On Mon, Jul 27, 2009 at 11:36 AM, Alan Raison <[email protected]>wrote:

> Hi all
>
> I've been looking at the sequence support in DBDictionary and extending
> it for Ingres.  Ingres supports native sequences, but it seems that by
> default, OpenJPA prefers to use the OPENJPA_SEQUENCE_TABLE for internal
> sequence numbering.  Setting openjpa.Sequence=native changes this to use
> the native sequences.
>
> Is there a way/would it be desirable to set a preference for native
> sequences in the DB Dictionary?  I don't see this in any other
> dictionary, so I assume it's not desirable.  Perhaps this is so the
> schema is predictable?
>
> Thanks
>
> Alan
>

Reply via email to