隨筆-112  評論-73  文章-0  trackbacks-0

          今天又深入了了解和測試了一下Hibernate cascade 和 inverse 。

          Inverse

          在Hibernate annotation 中inverse 默認值是"true" 當配置了mappedBy="…"時就相當于inverse="false"了。

          Cascade

          CascadeType類中有這樣幾個常量,ALL、PERSIST、MERGE、REFRESH、REMOVE

          讓代碼說話吧:

          @Entity

          @Table(name = "Users")

          public class User implements java.io.Serializable {

          ?

          ?

          ????private String id;

          ?

          ????private Rose rose;

          ?

          ????public User() {

          ????}

          ?

          ????@Id

          ????@Column(name = "Id", unique = true, nullable = false, insertable = true, updatable = true, length = 5)

          ????public String getId() {

          ????????return this.id;

          ????}

          ?

          ????public void setId(String id) {

          ????????this.id = id;

          ????}

          ?

          ????@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)

          ????@JoinColumn(name = "Roseid", unique = false, nullable = false, insertable = true, updatable = true)

          ????public Rose getRose() {

          ????????return this.rose;

          ????}

          ?

          ????public void setRose(Rose rose) {

          ????????this.rose = rose;

          ????}

          }

          ?

          @Entity

          @Table(name = "Rose")

          public class Rose implements java.io.Serializable {

          ?

          ????private String id;

          ?

          ????private Set<User> users = new HashSet<User>(0);

          ?

          ????public Rose() {

          ????}

          ?

          ????@Id

          ????@Column(name = "Id", unique = true, nullable = false, insertable = true, updatable = true, length = 3)

          ????public String getId() {

          ????????return this.id;

          ????}

          ?

          ????public void setId(String id) {

          ????????this.id = id;

          ????}

          ?

          ????@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER )

          ????@JoinColumn(name="RoseId")

          ????public Set<User> getUsers() {

          ????????return this.users;

          ????}

          ?

          ????public void setUsers(Set<User> userses) {

          ????????this.users = userses;

          ????}

          ?

          ????public void addUser(User user) {

          ????????user.setRose(this);

          ????????users.add(user);

          ????}

          ?

          當在user類中配置成cascade = { CascadeType.PERSIST, CascadeType.MERGE } 時,更新和刪除兩個級聯時:

          Hibernate: select user_.Id, user_.Enabledel as Enabledel1_, user_.Name as Name1_, user_.Password as Password1_, user_.Roseid as Roseid1_ from ERP.dbo.Users user_ where user_.Id=?

          Hibernate: select rose_.Id, rose_.Enabledel as Enabledel0_, rose_.Name as Name0_, rose_.Parent as Parent0_ from ERP.dbo.Rose rose_ where rose_.Id=?

          Hibernate: delete from ERP.dbo.Users where Id=?

          可以正常刪除!但是代碼要這樣寫:

          ?

          ???????? User user =new User("adm");

          ???????? user.setRose(new Rose("adm"));????//這句不加就不能刪除,提示錯誤。除非數據庫不加級聯限制

          ????????userDao.delete(user);

          ?

          當在user類中配置成cascade = { CascadeType.ALL } or cascade={} 時,無法刪除。

          ?

          更新時也類似于這種情況,注意rose類中的addUser(User user)方法。

          ?

          再有fetch = FetchType.EAGER在這里不是延時加載,如果設置成LAZY,在取得數據時怎么做好呢?看其他論壇的方法各有好處也有不好的地方,在找一個更方法。。。

          posted on 2007-05-31 20:52 Libo 閱讀(4835) 評論(3)  編輯  收藏

          評論:
          # re: Hibernate Cascade 和 inverse 2007-06-01 10:04 | 祎恬凡
          很像我同事的文章阿!  回復  更多評論
            
          # re: Hibernate Cascade 和 inverse 2007-06-01 18:50 | 魚腸劍
          把你同事的文章貼出來看看啊.
          技術都是一樣的,同一個功能都是那樣配置.沒準還能和他學習學習呢.
            回復  更多評論
            
          # re: Hibernate Cascade 和 inverse 2009-06-09 11:51 | ningle
          你正好說反了吧
          在Hibernate annotation 中inverse 默認值是"false" 當配置了mappedBy="…"時就相當于inverse="true"了。

          mappedBy指定的是不需要維護關系的一端  回復  更多評論
            

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


          網站導航:
           
          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(6)

          隨筆分類(54)

          隨筆檔案(109)

          其他BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 柯坪县| 车险| 阜阳市| 湟中县| 中方县| 乌拉特中旗| 高雄县| 海盐县| 广东省| 两当县| 襄垣县| 安吉县| 平江县| 栖霞市| 西华县| 奉节县| 越西县| 随州市| 沅江市| 茌平县| 清丰县| 象山县| 陵水| 汶川县| 灯塔市| 榆林市| 高青县| 克拉玛依市| 册亨县| 临江市| 高州市| 白城市| 岳阳县| 甘孜县| 新民市| 梧州市| 祥云县| 额济纳旗| 鄂温| 景泰县| 滕州市|