Hibernate学习笔记(5):多对一关联映射
many2one
关联映射本质:
将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用
利用class的many-to-one标签
<many-to-one name="group" column="groupid">
会自动在user表中添加一个字段,作为外键参照group表
persistent状态的对象不能引用transient状态的对象,否则抛出TransientObjectException
1、保存的时候先保存group然后保存user
2、使用级联,级联对保存、更新、删除有效,在many-to-one标签中设置casecade设置为save-update,还可以设置为all,delete,none,默认为none。不建议级联删除,会出现问题。
加载:
get或者load加载user时,会自动加载group
<many-to-one>会在多的一端加入一个外键,指向一的一端,这个外键是由column属性定义的,如果忽略了这个属性,那么默认的属性与实体一致
实例:
User类
package com
.
hk
.
hibernate
;
public
class
User
{
private
int id
;
private String name
;
private Group group
;
public
int
getId
()
{
return id
;
}
public
void
setId
(
int id
)
{
this
.
id
= id
;
}
public String
getName
()
{
return name
;
}
public
void
setName
( String name
)
{
this
.
name
= name
;
}
public Group
getGroup
()
{
return group
;
}
public
void
setGroup
( Group group
)
{
this
.
group
= group
;
}
}
Group类
package com
.
hk
.
hibernate
;
public
class
Group
{
int id
;
String name
;
public
int
getId
()
{
return id
;
}
public
void
setId
(
int id
)
{
this
.
id
= id
;
}
public String
getName
()
{
return name
;
}
public
void
setName
( String name
)
{
this
.
name
= name
;
}
}
User的映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 默认表明与类名一致,可以通过设置class的table属性来设置表明 -->
<class
name=
"com.hk.hibernate.User"
>
<!--主键,自动生成唯一值,必须放在最前面 -->
<id
name=
"id"
>
<generator
class=
"native"
/>
</id>
<property
name=
"name"
/>
<many-to-one
name=
"group"
column=
"groupid"
/>
</class>
</hibernate-mapping>
group的映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 默认表明与类名一致,注意改名,否则会出错-->
<class
name=
"com.hk.hibernate.Group"
table=
"_group"
>
<!--主键,自动生成唯一值,必须放在最前面 -->
<id
name=
"id"
>
<generator
class=
"native"
/>
</id>
<property
name=
"name"
/>
</class>
</hibernate-mapping>