隨筆-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 閱讀(4836) 評論(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指定的是不需要維護關系的一端  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 波密县| 高安市| 盐源县| 弥渡县| 罗城| 湘潭县| 阳曲县| 汝南县| 滦平县| 宿州市| 勐海县| 庄浪县| 吴忠市| 长丰县| 安丘市| 上饶市| 洮南市| 闽侯县| 固阳县| 凤台县| 额济纳旗| 通许县| 镇江市| 车险| 息烽县| 德州市| 库伦旗| 合川市| 肇州县| 白朗县| 太仆寺旗| 四子王旗| 边坝县| 秦皇岛市| 惠东县| 尼木县| 富平县| 广平县| 内乡县| 文登市| 双桥区|