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

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

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

    peacess

    統計

    留言簿(14)

    積分與排名

    閱讀排行榜

    評論排行榜

    hibernate 多對多關系在mysql、oracle中的不同

    用戶(User)與角色(Role)多對多關系(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數據庫中,保存UserRole時出錯。而完全相同的代碼在oracle數據中正確。
    操作如下:
            User user;
            Role role;
            //經過多步操作以后,user與role都保存到數據庫,與之相關聯的session已關閉
            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();
    //一提交就出錯,提示user沒有保存,但是奇怪的是為什么在oracle中完全正確。
    //最后在mysql中作如下的修改可以正確保存
    //把 userRole.setUser(user)與userRole.setRole(role)刪除
    有那位知道是什么問題,請告之

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

    評論

    # re: hibernate 多對多關系在mysql、oracle中的不同 2007-06-12 08:12 flybean

    Output the SQLs  回復  更多評論   


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲高清中文字幕综合网| 亚洲另类激情专区小说图片| 亚洲国产天堂在线观看| 成在线人视频免费视频| 亚洲视频一区二区| aa午夜免费剧场| 国产亚洲成av片在线观看| 久久国产福利免费| 亚洲乱码无码永久不卡在线 | 亚洲精品V天堂中文字幕| 日本亚洲欧洲免费天堂午夜看片女人员| 成人黄动漫画免费网站视频 | 午夜免费福利片观看| 久久精品国产亚洲综合色| 免费h视频在线观看| 亚洲精品无码专区在线在线播放| 亚洲国产成人久久精品app| 91精品国产免费久久久久久青草| 大学生a级毛片免费观看| 亚洲av综合av一区二区三区| 国产精品二区三区免费播放心 | 日本亚洲色大成网站www久久| 日韩精品视频在线观看免费| 又黄又大又爽免费视频| 黄床大片免费30分钟国产精品| 成人性生交大片免费看无遮挡| 亚洲国产精品国产自在在线| jizz免费观看| 亚洲激情视频在线观看| AA免费观看的1000部电影| 国产精品无码亚洲精品2021| 国产亚洲精品影视在线产品| 亚洲一区免费在线观看| 久久久久久久久无码精品亚洲日韩| 女同免费毛片在线播放| 亚洲图片中文字幕| 亚洲国产成人久久笫一页| 99热在线观看免费| 亚洲AV无码国产剧情| **俄罗斯毛片免费| 老子影院午夜伦不卡亚洲|