OpenJPA
  1. OpenJPA
  2. OPENJPA-431

Order INSERT statements on joined subclasses from parent to child

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Major Major
    • Resolution: Invalid
    • Affects Version/s: 1.0.0
    • Fix Version/s: None
    • Component/s: sql
    • Labels:
      None

      Description

      When creating a joined subclass relationship, it is desirable on the database side to place an integrity constraint on the subclass table that its object_id must exist in the parent class's table. (Because the subclass's row cannot exist without the parent class's row.)

      Unfortunately, OpenJPA orders the inserts in the opposite direction, trying to insert the child entity first (probably because that's the entity that the code is actually persisting), so with the integrity constraint in place, the insert will fail.

      It would be nice if in a joined-subclass relationship where multiple inserts were needed, SQL would be issued in order of highest in the class hierarchy to lowest so that integrity constraints on the database won't be violated.

        Issue Links

          Activity

          Nick Johnson created issue -
          Hide
          Patrick Linskey added a comment -

          Closing on the assumption that setting the 'openjpa.jdbc.SchemaFactory' to 'native' will resolve the issue. OpenJPA actually re-orders based on FKs in the schema. It is probably failing to re-order in this case because it is not configured to load your foreign keys from the schema (this can be a slow operation), and because you don't have any explicit foreign keys in the model.

          As has been discussed in the newsgroup, it would probably be a really good idea for us to change the defaults to assume that foreign keys exist in logical places, such as inheritance hierarchies and relationships. Of course, it's not always easy to say which FK to assume exists.

          Show
          Patrick Linskey added a comment - Closing on the assumption that setting the 'openjpa.jdbc.SchemaFactory' to 'native' will resolve the issue. OpenJPA actually re-orders based on FKs in the schema. It is probably failing to re-order in this case because it is not configured to load your foreign keys from the schema (this can be a slow operation), and because you don't have any explicit foreign keys in the model. As has been discussed in the newsgroup, it would probably be a really good idea for us to change the defaults to assume that foreign keys exist in logical places, such as inheritance hierarchies and relationships. Of course, it's not always easy to say which FK to assume exists.
          Patrick Linskey made changes -
          Field Original Value New Value
          Status Open [ 1 ] Closed [ 6 ]
          Resolution Invalid [ 6 ]
          Patrick Linskey made changes -
          Link This issue relates to OPENJPA-435 [ OPENJPA-435 ]
          Hide
          Nick Johnson added a comment -

          The suggestion given in OPENJPA-435 does result in the expected insert ordering.

          Show
          Nick Johnson added a comment - The suggestion given in OPENJPA-435 does result in the expected insert ordering.

            People

            • Assignee:
              Unassigned
              Reporter:
              Nick Johnson
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development