Neil的備忘錄

          just do it
          posts - 66, comments - 8, trackbacks - 0, articles - 0

          Loading an object

          Posted on 2008-11-01 10:07 Neil's NoteBook 閱讀(125) 評論(0)  編輯  收藏

          The load() methods of Session gives you a way to retrieve a persistent instance if you already know its identifier. load() takes a class object and will load the state into a newly instantiated instance of that class, in persistent state.

          Cat fritz = (Cat) sess.load(Cat.class, generatedId);
          // you need to wrap primitive identifiers
          long id = 1234;
          DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );

          Alternatively, you can load state into a given instance:

          Cat cat = new DomesticCat();
          // load pk's state into cat
          sess.load( cat, new Long(pkId) );
          Set kittens = cat.getKittens();

          Note that load() will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, load() just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This behaviour is very useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if batch-size is defined for the class mapping.

          If you are not certain that a matching row exists, you should use the get() method, which hits the database immediately and returns null if there is no matching row.

          Cat cat = (Cat) sess.get(Cat.class, id);
          if (cat==null) {
          cat = new Cat();
          sess.save(cat, id);
          }
          return cat;

          You may even load an object using an SQL SELECT ... FOR UPDATE, using a LockMode. See the API documentation for more information.

          Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);

          Note that any associated instances or contained collections are not selected FOR UPDATE, unless you decide to specify lock or all as a cascade style for the association.

          It is possible to re-load an object and all its collections at any time, using the refresh() method. This is useful when database triggers are used to initialize some of the properties of the object.

          sess.save(cat);
          sess.flush(); //force the SQL INSERT
          sess.refresh(cat); //re-read the state (after the trigger executes)

          An important question usually appears at this point: How much does Hibernate load from the database and how many SQL SELECTs will it use? This depends on the fetching strategy and is explained in Section 19.1, “Fetching strategies”


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 彭山县| 定襄县| 利津县| 许昌县| 茌平县| 五莲县| 宁强县| 泌阳县| 留坝县| 观塘区| 彰武县| 嘉禾县| 两当县| 同德县| SHOW| 鹤岗市| 临漳县| 富阳市| 曲沃县| 阿克苏市| 上饶市| 车致| 米易县| 织金县| 池州市| 扎兰屯市| 镇巴县| 宁陵县| 本溪市| 广州市| 鹿邑县| 白玉县| 通榆县| 浮梁县| 晋宁县| 临西县| 宜都市| 新郑市| 凤庆县| 雅江县| 红安县|