hibernate @mappedBy小记
来源:互联网 发布:武汉软件新城派出所 编辑:程序博客网 时间:2024/05/19 19:58
今天用到了hibernate作为持久层框架,表关系中设计到多对多的关系,考虑一下觉得有两条路子可以走,
1,建立中间表的实体类,存入多对多两个表的id,这样,这样在建立这两个表的实体类时不需要进行映射配置了。
2,不建立中间表的实体类,在两个多对多的表上建立映射关系。
下面说一下第二种方式:这里会用到mappedBy,以下是借鉴别人对mappedBy的理解
1.@mappedBy 属性简单理解为设定为主表(这只是我个人理解,上面文章中也有提到过)
所以另一端则需要设置外键@JoinColumn(name="fk_id")
2.@OneToMany 注解下返回Set集合(列如:上帝可以有多个信徒)。
3.@ManyToOne 注解下 设置外键 根据 外键获取到主表对象只能获取到一个对象(列如:信徒只能有一个上帝)。
主表(God) Java代码 收藏代码private Set believer= new HashSet(0); public void setBeliever(Set<Believer> believer){ this.believer= believer; } @OneToMany(cascade = { CascadeType.MERGE }, fetch = FetchType.LAZY, mappedBy = "God") public Set<Believer> getBeliever() { return believer; }
从表(Believer) Java代码 收藏代码private God god; public void setGod(God god){ this.god= god; } @ManyToOne(cascade = {}, fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "godid",nullable = false, insertable = false, updatable = false) }) public God getGod() { return god; }
然后在说一下
hibernate多对多中间表数据生成详解
//用户类中角色映射关系 @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @JoinTable( name="loginuser_role", joinColumns = @JoinColumn(name = "userAccout"), inverseJoinColumns = @JoinColumn(name = "roleID")) private List<Role> role = new ArrayList<Role>();
- //角色类用户映射关系
- @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "role")
- private List<LoginUser> loginUser = new ArrayList<LoginUser>();
代码详细说明略过,主要说明什么时候,中间表会存数据。代码解释如下:// 中间表插入了数据 //用户service层 UserService service = (UserService)ctx.getBean("userService"); //用户 LoginUser u = new LoginUser(); u.setUserName("sdkjf"); u.setUserPasswd("sdf"); u.setUserAccout("d"); //角色 Role r = new Role(); r.setRoleLeve(3); r.setRoleName("sdklf"); List<Role> t = new ArrayList<Role>(); t.add(r); //把角色加到用户 u.setRole(t); service.add(u);//保存
//中间表没有插入数据 //角色service RoleService service = (RoleService) ctx.getBean("roleService"); //角色 Role r = new Role(); r.setRoleLeve(3); r.setRoleName("sdklf"); //用户 LoginUser u = new LoginUser(); u.setUserName("sdkjf"); u.setUserPasswd("sdf"); u.setUserAccout("d"); List<LoginUser> lu = new ArrayList<LoginUser>(); lu.add(u); //设置用户 r.setLoginUser(lu); service.add(r);//保存
为何出现这样的情况,简单说明,因为在角色类中使用了mappedBy指向了用户对象中的role,这样的意思就是只能通过用户操作来做中间表(用户角色表)维护工作。如果不这样做,如上代码通过角色来做维护的时候,中间表是不会做任何数据修改工作的。
自己吐槽:1.为何hibernate做了这样的限制后,通过角色还能用户角色本表的插入工作,不提示任何错误,但是中间表就是没值(大神指教)
2.和第一问很相似,为何单单插入用户或者单单插入角色是可以的(就是我插入用户的时候我不设置角色,插入角色的时候我不设置用户。。。能成功,并且没有任何提示)。。。既然我设置了关系,应该每一个插入都是有校验的。。。不理解,大神指教
下面那些都是借鉴别人的文章,觉得很好,怕忘记了,便收集在一起,供自己及更多人使用。写完这篇文章之后,突然有一种感觉:我们不写文章,我们只是文章的搬运工,哈哈哈。
// 中间表插入了数据 //用户service层 UserService service = (UserService)ctx.getBean("userService"); //用户 LoginUser u = new LoginUser(); u.setUserName("sdkjf"); u.setUserPasswd("sdf"); u.setUserAccout("d"); //角色 Role r = new Role(); r.setRoleLeve(3); r.setRoleName("sdklf"); List<Role> t = new ArrayList<Role>(); t.add(r); //把角色加到用户 u.setRole(t); service.add(u);//保存
//中间表没有插入数据 //角色service RoleService service = (RoleService) ctx.getBean("roleService"); //角色 Role r = new Role(); r.setRoleLeve(3); r.setRoleName("sdklf"); //用户 LoginUser u = new LoginUser(); u.setUserName("sdkjf"); u.setUserPasswd("sdf"); u.setUserAccout("d"); List<LoginUser> lu = new ArrayList<LoginUser>(); lu.add(u); //设置用户 r.setLoginUser(lu); service.add(r);//保存
为何出现这样的情况,简单说明,因为在角色类中使用了mappedBy指向了用户对象中的role,这样的意思就是只能通过用户操作来做中间表(用户角色表)维护工作。如果不这样做,如上代码通过角色来做维护的时候,中间表是不会做任何数据修改工作的。
自己吐槽:1.为何hibernate做了这样的限制后,通过角色还能用户角色本表的插入工作,不提示任何错误,但是中间表就是没值(大神指教)
2.和第一问很相似,为何单单插入用户或者单单插入角色是可以的(就是我插入用户的时候我不设置角色,插入角色的时候我不设置用户。。。能成功,并且没有任何提示)。。。既然我设置了关系,应该每一个插入都是有校验的。。。不理解,大神指教
1 0
- hibernate @mappedBy小记
- HIbernate Mappedby
- hibernate mappedBy 说明
- Hibernate Annotation @mappedBy含义
- mappedBy in Hibernate/JPA
- Hibernate Annotation @mappedBy含义
- Hibernate之mappedBy
- Hibernate之mappedBy
- hibernate mappedBy属性详解!
- hibernate中的inverse和mappedBy
- Hibernate Annotation mappedBy注解理解
- Understanding mappedBy annotation in Hibernate
- hibernate中mappedby的理解
- Hibernate 注解的mappedby属性
- Hibernate Annotation mappedBy注解理解
- Hibernate之mappedBy属性详解
- MappedBy
- mappedBy
- ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
- BZOJ 1199: [HNOI2005]汤姆的游戏
- 笨方法学Python之一(原第六)
- Android Studio动态调试Smali
- PHP string
- hibernate @mappedBy小记
- 【BZOJ1006】【HNOI2008】神奇的国度
- 编程书籍
- Android Studio 本机调试
- Uva 12664 Interesting Calculator 最短路 递推 优化技巧
- 对CRITICAL_SECTION理解的总结
- MVC过滤器详解
- HDU 5364 Distribution money
- 欢迎使用CSDN-markdown编辑器