Neil的備忘錄

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

          Making objects persistent

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

          Newly instantiated instances of a a persistent class are considered transient by Hibernate. We can make a transient instance persistent by associating it with a session:

          DomesticCat fritz = new DomesticCat();
          fritz.setColor(Color.GINGER);
          fritz.setSex('M');
          fritz.setName("Fritz");
          Long generatedId = (Long) sess.save(fritz);

          If Cat has a generated identifier, the identifier is generated and assigned to the cat when save() is called. If Cat has an assigned identifier, or a composite key, the identifier should be assigned to the cat instance before calling save(). You may also use persist() instead of save(), with the semantics defined in the EJB3 early draft.

          • persist() makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. persist() also guarantees that it will not execute an INSERT statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context.

          • save() does guarantee to return an identifier. If an INSERT has to be executed to get the identifier ( e.g. "identity" generator, not "sequence"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context.

          Alternatively, you may assign the identifier using an overloaded version of save().

          DomesticCat pk = new DomesticCat();
          pk.setColor(Color.TABBY);
          pk.setSex('F');
          pk.setName("PK");
          pk.setKittens( new HashSet() );
          pk.addKitten(fritz);
          sess.save( pk, new Long(1234) );

          If the object you make persistent has associated objects (e.g. the kittens collection in the previous example), these objects may be made persistent in any order you like unless you have a NOT NULL constraint upon a foreign key column. There is never a risk of violating foreign key constraints. However, you might violate a NOT NULL constraint if you save() the objects in the wrong order.

          Usually you don't bother with this detail, as you'll very likely use Hibernate's transitive persistence feature to save the associated objects automatically. Then, even NOT NULL constraint violations don't occur - Hibernate will take care of everything. Transitive persistence is discussed later in this chapter. 


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


          網站導航:
           
          主站蜘蛛池模板: 杂多县| 曲阜市| 浦东新区| 平昌县| 韶关市| 蒙自县| 永胜县| 从化市| 肥东县| 涿州市| 教育| 乳源| 巨野县| 晋州市| 新野县| 五峰| 利辛县| 万盛区| 高雄县| 西峡县| 水富县| 涞源县| 西乌珠穆沁旗| 广德县| 巨野县| 璧山县| 遂平县| 天门市| 信宜市| 焉耆| 长兴县| 苍溪县| 新化县| 南江县| 通榆县| 张家口市| 宣化县| 来凤县| 宁德市| 延川县| 镇平县|