From dev-return-6998-apmail-openjpa-dev-archive=openjpa.apache.org@openjpa.apache.org Tue Dec 18 18:57:39 2007
Return-Path:
Delivered-To: apmail-openjpa-dev-archive@www.apache.org
Received: (qmail 2015 invoked from network); 18 Dec 2007 18:57:39 -0000
Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2)
by minotaur.apache.org with SMTP; 18 Dec 2007 18:57:39 -0000
Received: (qmail 30410 invoked by uid 500); 18 Dec 2007 18:57:27 -0000
Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org
Received: (qmail 30386 invoked by uid 500); 18 Dec 2007 18:57:27 -0000
Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm
Precedence: bulk
List-Help:
List-Unsubscribe:
List-Post:
List-Id:
Reply-To: dev@openjpa.apache.org
Delivered-To: mailing list dev@openjpa.apache.org
Received: (qmail 30377 invoked by uid 99); 18 Dec 2007 18:57:27 -0000
Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136)
by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Dec 2007 10:57:27 -0800
X-ASF-Spam-Status: No, hits=3.2 required=10.0
tests=HTML_MESSAGE,SPF_NEUTRAL
X-Spam-Check-By: apache.org
Received-SPF: neutral (athena.apache.org: local policy)
Received: from [72.14.246.245] (HELO ag-out-0708.google.com) (72.14.246.245)
by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 18 Dec 2007 18:57:05 +0000
Received: by ag-out-0708.google.com with SMTP id 33so1757446agc.0
for ; Tue, 18 Dec 2007 10:57:06 -0800 (PST)
Received: by 10.150.196.5 with SMTP id t5mr3149454ybf.57.1198004225055;
Tue, 18 Dec 2007 10:57:05 -0800 (PST)
Received: by 10.35.38.11 with HTTP; Tue, 18 Dec 2007 10:57:04 -0800 (PST)
Message-ID:
Date: Tue, 18 Dec 2007 20:57:04 +0200
From: "Miroslav Nachev"
To: users@openjpa.apache.org, dev@openjpa.apache.org
Subject: Re: URGENT: Re: Generic (user) GeneratedValue
In-Reply-To: <47679E09.3040602@space-comm.com>
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_Part_11738_32816758.1198004224959"
References:
<7262f25e0711051247x5b7cc50dwdbcaf9d5acdd9969@mail.gmail.com>
<7262f25e0711051309w6558713l3b5c610d8cbe3acc@mail.gmail.com>
<7262f25e0711051332x5e5963a1i49e6043e09c7a59f@mail.gmail.com>
<47679E09.3040602@space-comm.com>
X-Virus-Checked: Checked by ClamAV on apache.org
------=_Part_11738_32816758.1198004224959
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
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 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:
>
>
>
> 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 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 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 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 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 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
>
>
>
>
------=_Part_11738_32816758.1198004224959--