Hibernate一对多映射
程序员文章站
2022-07-04 23:09:44
...
在关联关系的映射中使用最多的就是一对多的关联,一对多的关联分为两种:单向一对多,双向一对多。
首先准备两张表:用户表(user)和用户组表(group)
1.单向一对多的情况:
Group类中有如下属性:
private Integer id;
private String name;
//set集合用于存一对多中的"多"的一方
private Set<User> Users = new HashSet<User>(0)
User类只需要有本身的属性即可:
private Integer id;
private String name;
重点:
Group.hbm.xml文件的配置如下:
在该配置文件中,inverse可以使用默认false,或者显示指定false,如以上代码。这样就指定一对多之间的关系由group这个POJO来维护。在单项一对多关联中,这点很重要,cascade="all"指定级联之间的等级,它具有如下几种值:
all:所有情况下均进行关联操作
none:所有情况下均不进行关联操作。这个默认值。
save-update:在执行save、update/saveOrUpdate时进行关联操作
delete:在执行delete时进行关联操作。
user.hbm.xml文件的配置与User这个类一样,不需要包含如何关于关联关系的配置:
Xml代码
但这里有两点需要说明的是:
1.如果在Group.hbm.xml映射文件中设置了inverse=true,那么说明这个一对多的关联是由多的一方来维护。
2.如果Group.hbm.xml映射文件中设置inverse=false,或者不设置该属性,即表示由自身来维护这个关联关系。
首先准备两张表:用户表(user)和用户组表(group)
create table'group'( 'id' int(10) unsigned NOT NULL auto_increment, 'name' varchar(45)NOT NULL, PRIMARY KEY('id') ) create table 'user'( 'id' int(10) unsigned NOT NULL auto_increment, 'name' varchar(45) NOT NULL, 'group_id' int(10) unsigned default NULL, PRIMARY KEY('id'), KEY `FK_users_1` (`group_id`), CONSTRAINT `FK_users_1` FOREIGN KEY (`group_id`) REFERENCES `group` (`id`) )
1.单向一对多的情况:
Group类中有如下属性:
private Integer id;
private String name;
//set集合用于存一对多中的"多"的一方
private Set<User> Users = new HashSet<User>(0)
User类只需要有本身的属性即可:
private Integer id;
private String name;
重点:
Group.hbm.xml文件的配置如下:
<hibernate-mapping> <class name="com.stream.model.Group" table="group" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="identity" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="45" not-null="true" /> </property> <!-- 以下是单向一对多的配置信息--> <set name="users" inverse="false" cascade="all"> <key> <!-- 指定user表中引用外键的是哪一列--> <column name="group_id"/> </key> <!--配置是与哪一个类之间的一对多 --> <one-to-many class="com.stream.model.User" /> </set> </class> </hibernate-mapping>
在该配置文件中,inverse可以使用默认false,或者显示指定false,如以上代码。这样就指定一对多之间的关系由group这个POJO来维护。在单项一对多关联中,这点很重要,cascade="all"指定级联之间的等级,它具有如下几种值:
all:所有情况下均进行关联操作
none:所有情况下均不进行关联操作。这个默认值。
save-update:在执行save、update/saveOrUpdate时进行关联操作
delete:在执行delete时进行关联操作。
user.hbm.xml文件的配置与User这个类一样,不需要包含如何关于关联关系的配置:
Xml代码
<class name="com.stream.model.User" table="user" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="identity" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="45" not-null="true" /> </property> </class>
但这里有两点需要说明的是:
1.如果在Group.hbm.xml映射文件中设置了inverse=true,那么说明这个一对多的关联是由多的一方来维护。
2.如果Group.hbm.xml映射文件中设置inverse=false,或者不设置该属性,即表示由自身来维护这个关联关系。