在关联关系的映射中使用最多的就是一对多的关联,一对多的关联分为两种:单向一对多,双向一对多。
首先准备两张表:用户表(user)和用户组表(group)
1.单向一对多的情况:
Group类中有如下属性:
private Integer id;
private String name;
[color=red]//set集合用于存一对多中的"多"的一方
private Set<User> Users = new HashSet<User>(0) [/color]
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;
[color=red]//set集合用于存一对多中的"多"的一方
private Set<User> Users = new HashSet<User>(0) [/color]
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,或者不设置该属性,即表示由自身来维护这个关联关系。