3 Replies Latest reply on Mar 27, 2016 10:29 AM by BKBK

    Why does EntityLoadByExample() ignore relationships?

    Sir_Meili Level 1

      I've been using ORM for a while, but just started getting into using EntityLoadByExample(). I thought this would be great, but I've run into an issue. Say I have an object "Art" and it has a many-to-one relationship to "Artist" (many arts may have the same artist).


      So my sample Art object would be like:


      component displayname = 'Art' {

           property name='artID' fieldtype='id' generator='identity';

           property name='title' type='string';

           property name='Artist' fieldtype='many-to-one' CFC='Artist' fkcolumn='ArtistID'



      My sample Artist Object would be like:


      component displayname = 'Artist' {

           property name='ArtistID' fieldtype='id' generator='identity';

           property name='Name' type='string';



      So, lets say I have an artist in my DB:



      And let's say I have some "Art" in my DB:

      1The Water Lily Pond1
      2Woman with a Parasol1
      4The Night Watch2
      5The Jewish Bride2


      So, I will get the Monet Object:

      monet = EntityLoad( 'Artist' , 1 , true );


      Then I will create a "new" Art and add in monet as the artist:

      myBlankArt = EntityNew( 'Art' , { Artist = monet } );


      So, my expectations is that I would be able to run the following code and ONLY get the Art Objects with ArtIDs 1, 2, and 3 (because they have ArtistID 1).


      artSearch = EntityLoadByExample( 'Art' , myBlankArt );


      However, what happens is I get ALL the Art Objects because it IGNORES the Artist object in my example entity.


      Am I complete crazy for expecting this to work? I understand that it might be a limitation of Hibernate, but it is quite frustrating!


      I have found a work around by adding the following property to the Art Object:


      property name='ArtistID' forumula='select ArtistID';


      then adding using the ID in the entity using some somewhat complex code to dynamically pull the objects, then grab their ids,

          public function loadByExample( example ) {

                local.metaData = getMetaData( arguments.example );

                for( local.property in local.metaData.properties ) {

                     if( structKeyExists( local.property , 'fieldtype' ) && listFind( 'many-to-one,one-to-one' , local.property.fieldType , ',' ) ) {

                          if( structKeyExists( local.property , 'fkcolumn' ) ) {

                               local.innerObject = arguments.example.getProperty( local.property.name , arguments.example );

                               if( !isNull( local.innerObject ) )


                                    local.id = local.innerObject.getPrimaryKey();

                                    if( !isNull( local.id ) )


                                         arguments.example.setProperty( local.property.fkcolumn , local.id , local.newObject );






                return EntityLoadByExample( arguments.example );



      (note: getProperty and setProperty are methods in my base object that all my ORM objects extend that allow me to send in the name of a property and set/retrieve it instead of using the setter/getter. This is helpful when I am dynamically pulling the objects name)


      It just seems like a hassle when the "...ByExample" I feel should do this for you.

        • 1. Re: Why does EntityLoadByExample() ignore relationships?
          BKBK Adobe Community Professional & MVP

          Sir_Meili wrote:


          1 The Water Lily Pond 1
          2 Woman with a Parasol 1
          3 Poppies 1
          4 The Night Watch 2
          5 The Jewish Bride 2




          artSearch = EntityLoadByExample( 'Art' , myBlankArt );


          Two comments:

          1.      The last table column should be artistID.
          2.       Why don't you just go for something like

                         artSearch = EntityLoadByExample(myBlankArt);

          • 2. Re: Why does EntityLoadByExample() ignore relationships?
            Sir_Meili Level 1

            1. You are correct. it shoudl be artistID (And it would be in my use case). I can't edit the original post to fix it.

            2. That is what I do, again you are correct. I'm new lot using EntityLoadByExample. It does not need the object name.


            So, to be clear, when I run:

            artSearch = EntityLoadByExample(myBlankArt);

            it completely ignores that the myBlankArt Object has the artist object in it and returns all art objects.

            (sorry for the errors in my example above, I was writing the example in the post, my objects are a bit more complex, so I wanted to dumb it down some.)

            • 3. Re: Why does EntityLoadByExample() ignore relationships?
              BKBK Adobe Community Professional & MVP

              myBlankArt = EntityNew( 'Art' , { Artist = monet } );

              I would, after changing the last column name to artistID, do what comes naturally:


              myBlankArt = EntityNew( 'Art' , { artistID = 1 } );