Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-469

Generic (user, custom) GeneratedValue

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Closed
    • Critical
    • Resolution: Duplicate
    • 1.1.0
    • 1.1.0
    • jdbc, kernel
    • None
    • The database is MySQL which in principle doesn't support sequences. JDK 1.5 is used as and JDK6. For the test case JDK1.5.

    Description

      I am trying to create a Custom (generic, user) Sequence Generator following the instructions from Patrick Linskey:
      @Id
      @Column(name = "Data_Object_Id", nullable = false)
      @SequenceGenerator(name="DataObjectsSeq", sequenceName="test.DataObjectsGenerator")
      @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="DataObjectsSeq")
      private BigDecimal dataObjectId;

      Unfortunately this doesn't works in my case maybe because I am using database which in principle doesn't support sequences or another reason. I dig up the code and see that there is incorrectly logic 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; }

      }

      In my opinion the problem is that when I am creating a custom sequence, in switch statement this custom sequence is treat as native database sequence. This is a general problem. The correct behavior in this sequence to be treat as custom sequences as UUID_STRING and UUID_HEX. To be fixed that problem I will create a new enumeration which 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 with one more case as follow:
      switch (strategy)

      { case ValueStrategies.SEQUENCE: ... break; case ValueStrategies.UUID_STRING: ... break; case ValueStrategies.UUID_HEX: ... break; case ValueStrategies.CUSTOM: return JavaTypes.convert(seq.next(ctx, meta), typeCode); default: ... break; }

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              miro Miroslav Nachev
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: