Default constructor getting executed many times when tried to load records in Hibernate 5.x












0















Could some one please help me to understand, Why default constructor getting executed many times when tried to load records in Hibernate 5.x



Persistence class



public class Customer {

private int cid;
private String cphone;
private String ccity;
private String cemail;

public Customer() {
System.out.println("**Default Constructor**");
}

public Customer(String cphone, String ccity, String cemail) {
this.cphone = cphone;
this.ccity = ccity;
this.cemail = cemail;
}

public int getCid() {
return cid;
}

public void setCid(int cid) {
this.cid = cid;
}

public String getCphone() {
return cphone;
}

public void setCphone(String cphone) {
this.cphone = cphone;
}

public String getCcity() {
return ccity;
}

public void setCcity(String ccity) {
this.ccity = ccity;
}

public String getCemail() {
return cemail;
}

public void setCemail(String cemail) {
this.cemail = cemail;
}
}


Steps to load Records
enter image description here



Logs
Console Logs Screenshot



Note: Tried with SQLServer 2014 and Hibernate 5.3.7










share|improve this question





























    0















    Could some one please help me to understand, Why default constructor getting executed many times when tried to load records in Hibernate 5.x



    Persistence class



    public class Customer {

    private int cid;
    private String cphone;
    private String ccity;
    private String cemail;

    public Customer() {
    System.out.println("**Default Constructor**");
    }

    public Customer(String cphone, String ccity, String cemail) {
    this.cphone = cphone;
    this.ccity = ccity;
    this.cemail = cemail;
    }

    public int getCid() {
    return cid;
    }

    public void setCid(int cid) {
    this.cid = cid;
    }

    public String getCphone() {
    return cphone;
    }

    public void setCphone(String cphone) {
    this.cphone = cphone;
    }

    public String getCcity() {
    return ccity;
    }

    public void setCcity(String ccity) {
    this.ccity = ccity;
    }

    public String getCemail() {
    return cemail;
    }

    public void setCemail(String cemail) {
    this.cemail = cemail;
    }
    }


    Steps to load Records
    enter image description here



    Logs
    Console Logs Screenshot



    Note: Tried with SQLServer 2014 and Hibernate 5.3.7










    share|improve this question



























      0












      0








      0








      Could some one please help me to understand, Why default constructor getting executed many times when tried to load records in Hibernate 5.x



      Persistence class



      public class Customer {

      private int cid;
      private String cphone;
      private String ccity;
      private String cemail;

      public Customer() {
      System.out.println("**Default Constructor**");
      }

      public Customer(String cphone, String ccity, String cemail) {
      this.cphone = cphone;
      this.ccity = ccity;
      this.cemail = cemail;
      }

      public int getCid() {
      return cid;
      }

      public void setCid(int cid) {
      this.cid = cid;
      }

      public String getCphone() {
      return cphone;
      }

      public void setCphone(String cphone) {
      this.cphone = cphone;
      }

      public String getCcity() {
      return ccity;
      }

      public void setCcity(String ccity) {
      this.ccity = ccity;
      }

      public String getCemail() {
      return cemail;
      }

      public void setCemail(String cemail) {
      this.cemail = cemail;
      }
      }


      Steps to load Records
      enter image description here



      Logs
      Console Logs Screenshot



      Note: Tried with SQLServer 2014 and Hibernate 5.3.7










      share|improve this question
















      Could some one please help me to understand, Why default constructor getting executed many times when tried to load records in Hibernate 5.x



      Persistence class



      public class Customer {

      private int cid;
      private String cphone;
      private String ccity;
      private String cemail;

      public Customer() {
      System.out.println("**Default Constructor**");
      }

      public Customer(String cphone, String ccity, String cemail) {
      this.cphone = cphone;
      this.ccity = ccity;
      this.cemail = cemail;
      }

      public int getCid() {
      return cid;
      }

      public void setCid(int cid) {
      this.cid = cid;
      }

      public String getCphone() {
      return cphone;
      }

      public void setCphone(String cphone) {
      this.cphone = cphone;
      }

      public String getCcity() {
      return ccity;
      }

      public void setCcity(String ccity) {
      this.ccity = ccity;
      }

      public String getCemail() {
      return cemail;
      }

      public void setCemail(String cemail) {
      this.cemail = cemail;
      }
      }


      Steps to load Records
      enter image description here



      Logs
      Console Logs Screenshot



      Note: Tried with SQLServer 2014 and Hibernate 5.3.7







      hibernate






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 1 at 9:39









      Erfan Ahmed

      96611527




      96611527










      asked Jan 1 at 9:13









      KmsKms

      66118




      66118
























          1 Answer
          1






          active

          oldest

          votes


















          1














          The first call



          As of Hibernate 5.3.7 the first one happens during SessionFactory initialization process:



          if ( identifierGetter != null && constructor != null ) {
          // use the id value of a newly instantiated instance as the unsaved-value
          final Serializable defaultValue = (Serializable) identifierGetter.get( instantiate( constructor ) );
          return new IdentifierValue( defaultValue );
          }


          Seems it figures out which value of the @Id field indicates that an @Entity is unsaved.



          See UnsavedValueFactory.



          The second call



          You're using Session#load, which returns a proxy for the entity assuming it exists.



          The proxy class is a sublcass of @Entity



          So the proxy class' constructor calls super constructor. Hence the second call



          The third call



          Then you're forcing Hibernate to initialize the entity (you call getCemail()).
          Hibernate issues the sql statement and then initializes AbstractLazyInitializer#target. This is the third call to the constructor





          To better understand what is going on I would recommend you to debug it.



          Put a breakpoint at the default constructor and watch the stack trace.






          share|improve this answer

























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53994261%2fdefault-constructor-getting-executed-many-times-when-tried-to-load-records-in-hi%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            The first call



            As of Hibernate 5.3.7 the first one happens during SessionFactory initialization process:



            if ( identifierGetter != null && constructor != null ) {
            // use the id value of a newly instantiated instance as the unsaved-value
            final Serializable defaultValue = (Serializable) identifierGetter.get( instantiate( constructor ) );
            return new IdentifierValue( defaultValue );
            }


            Seems it figures out which value of the @Id field indicates that an @Entity is unsaved.



            See UnsavedValueFactory.



            The second call



            You're using Session#load, which returns a proxy for the entity assuming it exists.



            The proxy class is a sublcass of @Entity



            So the proxy class' constructor calls super constructor. Hence the second call



            The third call



            Then you're forcing Hibernate to initialize the entity (you call getCemail()).
            Hibernate issues the sql statement and then initializes AbstractLazyInitializer#target. This is the third call to the constructor





            To better understand what is going on I would recommend you to debug it.



            Put a breakpoint at the default constructor and watch the stack trace.






            share|improve this answer






























              1














              The first call



              As of Hibernate 5.3.7 the first one happens during SessionFactory initialization process:



              if ( identifierGetter != null && constructor != null ) {
              // use the id value of a newly instantiated instance as the unsaved-value
              final Serializable defaultValue = (Serializable) identifierGetter.get( instantiate( constructor ) );
              return new IdentifierValue( defaultValue );
              }


              Seems it figures out which value of the @Id field indicates that an @Entity is unsaved.



              See UnsavedValueFactory.



              The second call



              You're using Session#load, which returns a proxy for the entity assuming it exists.



              The proxy class is a sublcass of @Entity



              So the proxy class' constructor calls super constructor. Hence the second call



              The third call



              Then you're forcing Hibernate to initialize the entity (you call getCemail()).
              Hibernate issues the sql statement and then initializes AbstractLazyInitializer#target. This is the third call to the constructor





              To better understand what is going on I would recommend you to debug it.



              Put a breakpoint at the default constructor and watch the stack trace.






              share|improve this answer




























                1












                1








                1







                The first call



                As of Hibernate 5.3.7 the first one happens during SessionFactory initialization process:



                if ( identifierGetter != null && constructor != null ) {
                // use the id value of a newly instantiated instance as the unsaved-value
                final Serializable defaultValue = (Serializable) identifierGetter.get( instantiate( constructor ) );
                return new IdentifierValue( defaultValue );
                }


                Seems it figures out which value of the @Id field indicates that an @Entity is unsaved.



                See UnsavedValueFactory.



                The second call



                You're using Session#load, which returns a proxy for the entity assuming it exists.



                The proxy class is a sublcass of @Entity



                So the proxy class' constructor calls super constructor. Hence the second call



                The third call



                Then you're forcing Hibernate to initialize the entity (you call getCemail()).
                Hibernate issues the sql statement and then initializes AbstractLazyInitializer#target. This is the third call to the constructor





                To better understand what is going on I would recommend you to debug it.



                Put a breakpoint at the default constructor and watch the stack trace.






                share|improve this answer















                The first call



                As of Hibernate 5.3.7 the first one happens during SessionFactory initialization process:



                if ( identifierGetter != null && constructor != null ) {
                // use the id value of a newly instantiated instance as the unsaved-value
                final Serializable defaultValue = (Serializable) identifierGetter.get( instantiate( constructor ) );
                return new IdentifierValue( defaultValue );
                }


                Seems it figures out which value of the @Id field indicates that an @Entity is unsaved.



                See UnsavedValueFactory.



                The second call



                You're using Session#load, which returns a proxy for the entity assuming it exists.



                The proxy class is a sublcass of @Entity



                So the proxy class' constructor calls super constructor. Hence the second call



                The third call



                Then you're forcing Hibernate to initialize the entity (you call getCemail()).
                Hibernate issues the sql statement and then initializes AbstractLazyInitializer#target. This is the third call to the constructor





                To better understand what is going on I would recommend you to debug it.



                Put a breakpoint at the default constructor and watch the stack trace.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Jan 1 at 13:48

























                answered Jan 1 at 11:35









                caco3caco3

                1,8481719




                1,8481719
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53994261%2fdefault-constructor-getting-executed-many-times-when-tried-to-load-records-in-hi%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    MongoDB - Not Authorized To Execute Command

                    in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith

                    How to fix TextFormField cause rebuild widget in Flutter