openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Dick" <michael.d.d...@gmail.com>
Subject Re: URGENT: Re: Generic (user) GeneratedValue
Date Tue, 18 Dec 2007 21:37:56 GMT
Please do so. We'll be happy to look at the patch.

-Mike

On Dec 18, 2007 12:57 PM, Miroslav Nachev <miro@space-comm.com> wrote:

> What do you think if I register an enhancement and then attach a patch if
> the new feature which will fix this problem?
> In short I will add new enumeration in ValueStrategies. The new
> enumeration
> will be named CUSTOM or GENERIC or another name. Then I will do the
> relevant
> changes in the code. Then in the switch statement will be one more case as
> follow:
>        switch (strategy)
>        {
>             case ValueStrategies.SEQUENCE:
>             case ValueStrategies.UUID_STRING:
>             case ValueStrategies.UUID_HEX:
>             case ValueStrategies.CUSTOM:
>             default:
>        }
>
>
> Miro.
>
>
>
> On 12/18/07, Miroslav Nachev <miro@space-comm.com> wrote:
> >
> >  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> <
> 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> <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> <
> 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> <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> <
> 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
> >
> >
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message