openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Miroslav Nachev" <m...@space-comm.com>
Subject Re: URGENT: Re: Generic (user) GeneratedValue
Date Tue, 18 Dec 2007 18:57:04 GMT
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