Hi,

>From this mail I understand that the only way in OpenJPA to create Custom Identifier is using "Sequence" like that:
    @Id
    @Column(name = "Data_Object_Id", nullable = false)
    @SequenceGenerator(name="DataObjectsSeq", sequenceName="test.DataObjectsGenerator")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="DataObjectsSeq")
    private BigDecimal dataObjectId;

    In my test case I am using MySQL which doesn't support Sequences in principal and maybe this is a problem. It seams that if the database doesn't support Sequences it is not possible to create Generic Generated Value. But this is not the expected behavior because it is possible to create UUID_STRING and UUID_HEX which are not part of any databases. When I look at the code I see the following code in class ImplHelper.java:
    private static Object generateValue(StoreContext ctx, ClassMetaData meta, FieldMetaData fmd, int typeCode)\
    {
        ...
        switch (strategy)
        {
             case ValueStrategies.SEQUENCE:
                ...
                return JavaTypes.convert(seq.next(ctx, meta), typeCode);
                break;
             case ValueStrategies.UUID_STRING:
                return UUIDGenerator.nextString();
             case ValueStrategies.UUID_HEX:
                return UUIDGenerator.nextHex();
             default:
                return null;
        }
    }

When I try to create Generic Generated Value using Sequence in database which doesn't support Sequences I have exception.
Somebody tell me that I have to use last_insert_id as follow:
    dbDict.nextSequenceQuery = "SELECT LAST_INSERT_ID()"
I do that but then nobody invoke my class test.DataObjectsGenerator os some of it methods.

>From the above code and my tests it seems that theoretically is not possible to have custom (generic) Generated Value using database which doesn't support sequences.
Is that a bug? Do you have any idea how to solve it?

Finally I can replace the database with PostgreSQL but the problem will not be solved and will still exists.


Regards,
Miro.



Patrick Linskey wrote:
If you want it to be globally available, you can make it the default
implementation for use by @GenerationType.SEQUENCE by specifying it in
the openjpa.Sequence property.

If you want to use it in just some circumstances, or want to use
different configurations / instances for different types, then you can
set up named sequences as per the examples in the section I pointed
you to earlier, and then list the class name in the value. The example
would look like so:

@SequenceGenerator(name="MyCustomSeq", sequence="fully.qualified.ClassName")

Or, if you wanted to set some configuration options on the instance:

@SequenceGenerator(name="MyCustomSeq",
sequence="fully.qualified.ClassName(InitialValue=5,BitLength=32")

This would work provided that your class had methods called
setInitialValue() and setBitLength(), or public fields with those
names, or implemented the GenericConfigurable interface.

Similarly, the syntax for specifying a sequence globally via the
openjpa.Sequence setting would look like so:

<property name="openjpa.Sequence" value="fully.qualified.ClassName"/>

OpenJPA configuration settings that can implement a particular
interface use this format plus more-friendly aliases quite frequently.

-Patrick

On Nov 5, 2007 1:21 PM, Miroslav Nachev <miro@space-comm.com> wrote:
  
The implementation of Seq interface is the easiest part of the task. I can
not see how to configure JPA to use my Seq implementation instead of the
standard. Can I do that with annotation or I have to use another tricks?


Miro.

On 11/5/07, Patrick Linskey <plinskey@gmail.com> wrote:
    
Gotcha. To do that, you'll need to implement the
org.apache.openjpa.kernel.Seq interface. Take a look at the docs [1]
for details. That section of the docs also has some examples that
should help you use your custom sequence.

[1]
http://openjpa.apache.org/docs/latest/manual/manual.html#ref_guide_sequence

-Patrick

On Nov 5, 2007 1:01 PM, Miroslav Nachev <miro@space-comm.com> wrote:
      
No. I want to have my own class with which to generate the Ids.
For example I have binary(32) field which is the Primary Key. I would
        
like
      
to generate the values for this PK in my own way.


Miro.


On 11/5/07, Patrick Linskey <plinskey@gmail.com> wrote:
        
Hi,

Can you describe what you mean by a "generic" GeneratedValue? Do you
mean that you'd like to use the @GeneratedValue annotation on
non-identity fields? If so, then that is possible in OpenJPA.

-Patrick

On Nov 5, 2007 12:08 PM, Miroslav Nachev <miro@space-comm.com> wrote:
          
Hi,

Is there any way to have Generic GeneratedValue in OpenJPA. I know
            
that
      
this
          
is possible in Hibernate JPA but I would like to use OpenJPA if is
            
possible.
          
Any suggestions?


Regards,
Miro.

            

--
Patrick Linskey
202 669 5907

          

--
Patrick Linskey
202 669 5907