Cayenne
  1. Cayenne
  2. CAY-1710

Change default delete rule for runtime relationship

    Details

    • Type: Improvement Improvement
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Core Library
    • Labels:
      None

      Description

      It should be good to change default delete rule of runtime relationship from NO_ACTION to NULLIFY. It will protect us from bogus references in dependent objects without reverse relationships.

      Suppose we have such model:

      • ARTIST(ID, NAME) ==> Artist(name, paintings)
      • PAINTING(ID, NAME, ARTIST_ID, GALLERY_ID) ==> Painting(name, artist) // no reverse to Gallery
      • GALLERY(ID, NAME) ==> Gallery(name, paintings)

      Delete rule of relationship Artist-toMany-Paintings is set to CASCADE. Expect that after deleting Artist corresponding Paintings will be deleted too.. and also deleted from galleries thanks to reverse runtime relationship Painting-toOne-Gallery created by Cayenne.

      After adding data to database (print result of SelectQuery):

      • Artists: Picasso
      • Paintings: "Girl Reading at a Table" by Picasso
      • Galleries: Metropolitan Museum of Art: ["Girl Reading at a Table" by Picasso]

      After deleting object Picasso (print result of SelectQuery):

      • Artists:
      • Paintings:
      • Galleries: Metropolitan Museum of Art: ["Girl Reading at a Table" by null] // that is BIZARRE!

      This happens because when cascade delete comes to painting Girl it detects relationship with delete rule NO_ACTION. And so gallery stays with bogus reference.

      PS. After recreation of ObjectContext all bogus objects of course dissapear because they do not exist in database.

        Activity

        Hide
        Pavel Dyadych added a comment - - edited

        Attached sample maven project representing the problem

        Show
        Pavel Dyadych added a comment - - edited Attached sample maven project representing the problem

          People

          • Assignee:
            Unassigned
            Reporter:
            Pavel Dyadych
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:

              Development