Hi,

Additionally, I would expect things to work if you did
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="test.DataObjectsGenerator").

Have you tried the latter combination?
  
Yes, just now I tried. The result is not good:
<openjpa-1.1.0-SNAPSHOT-r420667:603666M fatal store error> org.apache.openjpa.persistence.RollbackException: Could not locate the sequence with name "test.DataObjectsGenerator".  It is possible that the metadata file containing the sequence has not been parsed yet.  Make sure to use a persistent class whose metadata is in the same file somewhere in your application before requesting the sequence.
        at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:490)
...
Caused by: <openjpa-1.1.0-SNAPSHOT-r420667:603666M fatal user error> org.apache.openjpa.persistence.ArgumentException: Could not locate the sequence with name "test.DataObjectsGenerator".  It is possible that the metadata file containing the sequence has not been parsed yet.  Make sure to use a persistent class whose metadata is in the same file somewhere in your application before requesting the sequence.
        at org.apache.openjpa.meta.MetaDataRepository.getSequenceMetaData(MetaDataRepository.java:1726)
...


Miro.

Patrick Linskey wrote:
Hi,

I would roughly expect your example to work as-is, given the code in
MetaDataRepository and ClassMetaData.

Additionally, I would expect things to work if you did
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="test.DataObjectsGenerator").

Have you tried the latter combination?

-Patrick

On Dec 18, 2007 11:16 AM, Miroslav Nachev <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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







    



  

Reply via email to