<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0
    今天同事問了一個問題,關于annotation配置多對多關聯映射以后,創建新的對象時候,為什么多對多的關系沒有保存到關系表中。具體問題如下:
    當前有一個User和一個Role,它們是多對多關系,中間表為user_role存放user和role的id。部分User代碼如下:
    @ManyToMany(cascade = { CascadeType.PERSIST }, fetch = FetchType.LAZY)   
        @JoinTable(name = "user_role",
          joinColumns = @JoinColumn(name = "user_id"),
          inverseJoinColumns = @JoinColumn(name = "role_id"))    

     public Set<Role> getRoles() {
      return roles;
     }
     
     public void setRoles(Set<Role> roles) {
      this.roles = roles;
     }
     
     public void addRole(Role role) {
      if (!this.roles.contains(role)) {
       this.roles.add(role);
      }
     }
     
     public void removeRole(Role role) {
      this.roles.remove(role);
     }

    Role中的部分代碼如下:
    @ManyToMany(
       cascade = {CascadeType.PERSIST, CascadeType.MERGE},
       mappedBy = "roles",
       targetEntity = User.class
       )

     public Set<User> getUsers() {
      return users;
     }

    而測試代碼繼承了AbstractTransactionalJUnit4SpringContextTests,代碼如下:
     @Test
     public void testManyToMany() {
      Role oneRole = new Role();
      oneRole.setDescription("manager");
      oneRole.setEnabled(true);
      oneRole.setRoleName("manger");
      
      Role twoRole = new Role();
      twoRole.setDescription("waitress");
      twoRole.setEnabled(true);
      twoRole.setRoleName("waitress");
      
      User user = new User();
      user.setEnabled(true);
      user.setPassword("jianghaiying");
      user.setUsername("Jiang HaiYing");
      user.addRole(oneRole);
      user.addRole(twoRole);
      userDAO.persist(user);
      
      try {
       userDAO.getConnection().commit();
      } catch (SQLException e) {
       e.printStackTrace();
      }
     }
    這樣執行以后,打印出的信息如下:
    Hibernate: insert into user (enabled, password, username) values (?, ?, ?)
    Hibernate: insert into role (description, enabled, name) values (?, ?, ?)
    Hibernate: insert into role (description, enabled, name) values (?, ?, ?)

    這時候問題出來了,為什么沒有往關系表中插入數據?
    其實這并不是代碼或者配置寫錯誤了,在正式運行代碼一切正常,而是AbstractTransactionalJUnit4SpringContextTests出的鬼,事實上多對多關聯關系是由Hibernate去幫我們維護的,而AbstractTransactionalJUnit4SpringContextTests為了保持數據的清潔又會自動回滾。如何解決這個問題呢?
    方法:
    只需要在test方法上添加@Rollback(false),不讓它回滾,一切正常了。這時候也可以去掉try語句了。
    Hibernate: insert into user (enabled, password, username) values (?, ?, ?)
    Hibernate: insert into role (description, enabled, name) values (?, ?, ?)
    Hibernate: insert into role (description, enabled, name) values (?, ?, ?)
    Hibernate: insert into user_role (user_id, role_id) values (?, ?)
    Hibernate: insert into user_role (user_id, role_id) values (?, ?)
    posted on 2009-11-04 20:58 周銳 閱讀(4607) 評論(1)  編輯  收藏 所屬分類: HibernateJunit 、Spring
    主站蜘蛛池模板: 羞羞视频在线观看免费| 亚洲尹人九九大色香蕉网站| 亚洲AV日韩综合一区尤物| 日本免费一区二区三区四区五六区| 亚洲福利中文字幕在线网址| 亚洲成av人片在线天堂无| 在线免费观看国产视频| 亚洲精品V天堂中文字幕| 国产麻豆剧传媒精品国产免费| 亚洲国产成人久久精品软件| 毛片基地免费视频a| 国产亚洲精品成人AA片| 女人被男人桶得好爽免费视频| 亚洲人成人伊人成综合网无码| 国内大片在线免费看| 亚洲a∨无码一区二区| 亚洲男人av香蕉爽爽爽爽| 国产免费伦精品一区二区三区| 亚洲综合伊人久久综合| 99在线观看免费视频| 亚洲精品mv在线观看| 全免费A级毛片免费看网站| 免费在线观看一区| 亚洲av中文无码乱人伦在线r▽| 久久午夜伦鲁片免费无码| 亚洲娇小性xxxx| 亚洲AⅤ无码一区二区三区在线| 羞羞视频免费网站在线看| 亚洲国产精品自在在线观看| 最近中文字幕电影大全免费版 | 国产日韩在线视频免费播放| 亚洲国产精品一区第二页| 91成人免费观看网站| 亚洲AV成人一区二区三区观看 | 看成年女人免费午夜视频| 久久亚洲AV永久无码精品| 99爱在线精品视频免费观看9| 亚洲日日做天天做日日谢| 中文字幕亚洲激情| 男女做羞羞的事视频免费观看无遮挡| 亚洲AV无码一区二区三区性色|