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

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

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

    peacess

    統(tǒng)計(jì)

    留言簿(14)

    積分與排名

    閱讀排行榜

    評(píng)論排行榜

    hibernate 多對(duì)多關(guān)系在mysql、oracle中的不同

    用戶(User)與角色(Role)多對(duì)多關(guān)系(UserRole)
    下面是表的代碼(配置為annotation)
    User:

    package sub;
    import java.io.Serializable;
    import java.util.Set;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    @Entity
    public class User implements Serializable
    {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private Long id;
        private Set<Role> roles;
        @Id
        @GeneratedValue
        public Long getId()
        {
            return id;
        }
        public void setId(Long id)
        {
            this.id = id;
        }
        @ManyToMany
        @JoinTable(name="UserRole",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;
        }
    }

    Role:

    package sub;
    import java.io.Serializable;
    import java.util.Set;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    @Entity
    public class Role implements Serializable
    {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private Long id;
        private Set<User> users;
        @Id
        @GeneratedValue
        public Long getId()
        {
            return id;
        }
        public void setId(Long id)
        {
            this.id = id;
        }
        @ManyToMany
        @JoinTable(name="UserRole",joinColumns={@JoinColumn(name="role_ID")},inverseJoinColumns={@JoinColumn(name="user_ID")})
        public Set<User> getUsers()
        {
            return users;
        }
        public void setUsers(Set<User> users)
        {
            this.users = users;
        }
    }

    UserRoleId:

    package sub;
    import java.io.Serializable;
    import javax.persistence.Embeddable;
    @Embeddable
    public class UserRoleId implements Serializable
    {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private Long userId;
        private Long roleId;
        public UserRoleId(Long userId, Long roleId)
        {
            this.userId = userId;
            this.roleId = roleId;
        }
        public UserRoleId()
        {
            this(null,null);
        }
        @Override
        public boolean equals(Object obj)
        {
            if(obj == this)return true;
            if(obj instanceof UserRoleId)
            {
                final UserRoleId other = (UserRoleId) obj;
                Long userT = getUserId();
                Long userOther = other.getUserId();
                Long roleT = getRoleId();
                Long roleOther = other.getRoleId();

                return ((userT == userOther) || (userT != null &&
                        userOther != null && userT.equals(userOther))) &&
                        ((roleT == roleOther) || (roleT != null &&
                                roleOther != null && roleT.equals(
                                        roleOther)));
            }
            return false;
        }
        @Override
        public int hashCode()
        {
            int re = 17;
            re += (userId == null?0:userId.hashCode());
            re += (roleId == null?0:roleId.hashCode());
            return 37*re;
        }
        public Long getUserId()
        {
            return userId;
        }
        public void setUserId(Long userId)
        {
            this.userId = userId;
        }
        public Long getRoleId()
        {
            return roleId;
        }
        public void setRoleId(Long roleId)
        {
            this.roleId = roleId;
        }
    }

    UserRole:

    package sub;
    import java.io.Serializable;
    import javax.persistence.AttributeOverride;
    import javax.persistence.AttributeOverrides;
    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    @Entity
    public class UserRole implements Serializable
    {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private UserRoleId id;
        private Role role;
        private User user;
        @EmbeddedId
        @AttributeOverrides( {
                @AttributeOverride(name = "userId", column = @Column(name = "user_ID", unique = false, nullable = false, insertable = true, updatable = true)),
                @AttributeOverride(name = "roleId", column = @Column(name = "role_ID", unique = false, nullable = false, insertable = true, updatable = true)) })
        public UserRoleId getId()
        {
            return id;
        }
        @ManyToOne(cascade = {})
        @JoinColumn(name = "role_ID", unique = false, nullable = false, insertable = false, updatable = false)
        public Role getRole()
        {
            return role;
        }
        @ManyToOne(cascade = {}, fetch = FetchType.EAGER)
        @JoinColumn(name = "user_ID", unique = false, nullable = false, insertable = false, updatable = false)
        public User getUser()
        {
            return user;
        }
        public void setId(UserRoleId id)
        {
            this.id = id;
        }
        public void setRole(Role role)
        {
            this.role = role;
        }
        public void setUser(User user)
        {
            this.user = user;
        }
    }

        在mysql數(shù)據(jù)庫中,保存UserRole時(shí)出錯(cuò)。而完全相同的代碼在oracle數(shù)據(jù)中正確。
    操作如下:
            User user;
            Role role;
            //經(jīng)過多步操作以后,user與role都保存到數(shù)據(jù)庫,與之相關(guān)聯(lián)的session已關(guān)閉
            Session s = null;//取得s的代碼沒有寫出來
            s.beginTransaction();
            UserRole userRole = new UserRole();
            userRole.setId(new UserRoleId(user.getId(),role.getId()));
            userRole.setUser(user);
            userRole.setRole(role);
            s.persist(userRole);
            s.getTransaction().commit();
    //一提交就出錯(cuò),提示user沒有保存,但是奇怪的是為什么在oracle中完全正確。
    //最后在mysql中作如下的修改可以正確保存
    //把 userRole.setUser(user)與userRole.setRole(role)刪除
    有那位知道是什么問題,請(qǐng)告之

    posted on 2007-06-11 23:19 中東 閱讀(2147) 評(píng)論(1)  編輯  收藏 所屬分類: hibernate

    評(píng)論

    # re: hibernate 多對(duì)多關(guān)系在mysql、oracle中的不同 2007-06-12 08:12 flybean

    Output the SQLs  回復(fù)  更多評(píng)論   


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 午夜国产大片免费观看| 亚洲人成77777在线播放网站| 国产成人免费A在线视频| 成人a毛片视频免费看| 国产大片免费观看中文字幕| 成人免费777777被爆出| 亚洲麻豆精品国偷自产在线91| 国产AV无码专区亚洲AV蜜芽| 国精无码欧精品亚洲一区| av网站免费线看| 色久悠悠婷婷综合在线亚洲| 亚洲精品视频免费在线观看| 亚洲第一页在线视频| 在线观看永久免费| 黄色a级片免费看| 亚洲人成网站日本片| 色久悠悠婷婷综合在线亚洲| 国产免费无码一区二区| 亚洲av综合色区| 国产自产拍精品视频免费看| 精品国产_亚洲人成在线| 亚洲人成无码久久电影网站| 久久免费99精品国产自在现线| 亚洲AV天天做在线观看| 亚洲成a人片在线观看老师| 无码国产精品一区二区免费式直播| 免费又黄又爽又猛大片午夜| 亚洲videos| 日本黄页网站免费| 久久国产色AV免费观看| 亚洲中文字幕无码爆乳app| 色拍自拍亚洲综合图区| 91情侣在线精品国产免费| 最好免费观看高清在线| 色网站在线免费观看| 亚洲性线免费观看视频成熟| 亚洲一卡2卡三卡4卡有限公司| 免费国产成人高清视频网站 | 三级网站免费观看| 国产精品亚洲专区在线播放| 亚洲欧美日韩中文无线码|