1. Cayenne
  2. CAY-1710

Change default delete rule for runtime relationship


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


      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.


        No work has yet been logged on this issue.


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


            • Created: