Hibernate!!多对一与一对多双向关联映射

双向的时候必须制定MappedBy这个属性!防止数据库生成的冗余。

MappedBy属性是设置在多的一方,即在数据库中,一般都是将属性设置在多的一方。

如果没有,那么在生成数据库表的时候,就会有两个外键如图:

onetomany的例子如下

加入MappedBy这个属性的 例子:

 1 package com.hb.model;
 2
 3 import java.util.Collection;
 4 import java.util.HashSet;
 5 import java.util.Iterator;
 6 import java.util.Set;
 7
 8 import javax.persistence.Entity;
 9 import javax.persistence.GeneratedValue;
10 import javax.persistence.Id;
11 import javax.persistence.JoinColumn;
12 import javax.persistence.OneToMany;
13 import javax.persistence.Table;
14
15 @Entity
16 @Table(name="t_group")//group是关键字,不重新命名就没有表生成
17 public class Group {
18     private  int  id ;
19     private  String  name ;
20     private  Set<User>  users = new  HashSet<User>();
21
22     @Id
23     @GeneratedValue
24     public int getId() {
25         return id;
26     }
27
28     //group是user类的属性名
29
30     //因为是一 到 多的那边,所以设置的东西会出现在多的那方,这样理解
31     //为什么是OneToMany
32     //group 是一的一方,所以就是一对多(OneToMany)
33     @OneToMany(mappedBy="bgroup")
34 //    @JoinColumn(name="groupId") //记住,永远会加在多的一方
35     //如果加上@JoinColumn(name="groupId"),则会在user表出现这个列,是自动生成的别名
36     public Set<User> getUsers() {
37         return users;
38     }
39
40
41     public void setId(int id) {
42         this.id = id;
43     }
44     public String getName() {
45         return name;
46     }
47     public void setName(String name) {
48         this.name = name;
49     }
50     public void setUsers(Set<User> users) {
51         this.users = users;
52     }
53
54 }
 1 @Entity
 2 @Table(name="t_user")
 3 public class User {
 4     private  int  id ;
 5     private  String  name ;
 6     private  Group  bgroup;
 7
 8     //数据库表中,关联关系设置在多的一方
 9     //为什么是ManyToOne
10     //user 是多的一方,所以就是多对一(ManyToOne)
11     @ManyToOne
12     public Group getBgroup() {
13         return bgroup;
14     }
15
16
17     public void setBgroup(Group bgroup) {
18         this.bgroup = bgroup;
19     }
20
21
22     @Id
23     @GeneratedValue
24     public int getId() {
25         return id;
26     }
27
28     public void setId(int id) {
29         this.id = id;
30     }
31     public String getName() {
32         return name;
33     }
34     public void setName(String name) {
35         this.name = name;
36     }
37
38 }

数据库表的生成如下:

时间: 2024-10-19 12:01:12

Hibernate!!多对一与一对多双向关联映射的相关文章

Hibernate中用注解配置一对多双向关联和多对一单向关联

Hibernate中用注解配置一对多双向关联和多对一单向关联 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射.在Hibernate3.3之前,需单独下载注解开发包 配置持久化类 配置关联关系 下面我们先从多对一单向关联关系讲起,多对一单向关联就是在多的一方植入一的一方的主键作为外键,下面我们先进行初始配置, 在配置的过程中我们会遇到一个问题  就是无论用load还是get都不会出现延迟加载,那么我们应该如何设置为要延迟加载,这样做的好处是可以在用的时候

hibernate之关于一对一单向,双向关联映射

[hibernate]之关于一对一单向,双向关联映射 首先我们来看,Hibernate官方对于一对一单向关联的解释: 基于外键关联的单向一对一关联和单向多对一关联几乎是一样的.唯一的不同就是单向一对一关 联中的外键字段具有唯一性约束. ok,那我们也可以这样理解,一对一其实就是多对一关联的特殊形式,我们知道Hibernate的配置方式有两种,分别是Annotations,XML两种配置方式! Annotations的一对一单向关联映射 人(User)和***号(Card) @Entity @Ta

一口一口吃掉Hibernate(五)——一对多单向关联映射

版权声明:本文为博主原创文章,未经博主允许不得转载.如需转载请声明:[转自 http://blog.csdn.net/xiaoxian8023 ] 在上一篇博客<一口一口吃掉Hibernate(四)--多对一单向关联映射>中,介绍了多对一的关联映射,今天就反过来说一下一对多的单向关联映射. 可能有人会对这2篇博客的题目有点混淆不清,跟日常说的关系有点不同.我们日常说的比如父子关系,夫妻关系都是说的双向关系,而现在讨论的则是单向关系,所以也就有了多对一和一对多的说法. 二者的关系其实很简单,只是

15.Hibernate一对多双向关联映射+分页

1.创建如下数据库脚本 1 --创建用户信息表 2 --编号,用户名,密码,年龄,性别,昵称,手机,地址,管理员,图像地址 3 create table users 4 ( 5 id number(10) primary key, 6 username varchar2(20) not null, 7 password varchar2(40) not null, 8 age number(10) not null, 9 sex number(10) not null, 10 nickname

Hibernate一对多单向关联和双向关联映射方法及其优缺点 (待续)

一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同.它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的同时加载多的一端的数据 多对一关联映射是指在加载多的一端数据的同时加载一的一端的数据 而单向一对多关联映射是在一的一端维护关系的,具有以下的缺点: 必须先保存多的一端后才可以保存一的一端,所以在保存多的一端时多的一端不知道一的一端是否 存在相应的数据,所以只能将维护的关系字段设置为null,如果为非空

hibernate之关于一对多单向关联映射

[hibernate]之关于一对多单向关联映射 基于外键的一对多关联映射!一对多,Group(组)对于Person(人),一个组可以有多个人!ok? Hibernate主要有两种配置方法,一种是Annotations 一种是XML! 下面是Annotations的配置方法! @Entity @Table(name="t_group") publicclass Group { private Integer id; private String name; private Set<

Hibernate之关于一对多,多对一双向关联映射

[Hibernate]之关于一对多,多对一双向关联映射 由于一对多,和多对一的双向关联映射基本上一样,所以这里就一起写下来! Annotations配置 @Entity @Table(name="t_group") publicclass Group { private Integer id; private String name; private Set<Person> persons=newHashSet<Person>();//set不允许重复,最适合数

Hibernate 一对多双向关联Demo

以Classes[班级]和Student[学生]为例的Demo //Classes.java public class Classes implements Serializable { private long cid; private String cname; private String cdesc; private Set<Student> students; //get和set } //Student .java public class Student implements Se

hibernate一对多双向关联

14.一对多双向关联 1.在多的一方关联一的一方,多的一方直接维护了关系,所以多的一方没有inverse属性,多的一方在保存自己的时候直接保存了外键,效率高. 2.建立关系和保存对象,可以对应两个映射文件,保存多的一方自己对应自己的映射文件,建立关系可以使用一的一方表的inverse属性.这样发出update语句,效率低了.一对多,从多的一方建立关系,效率高. 例子 在student这边保存属性private Classess classess; 在student.hbm.xml文件在<clas