Hibernate学习笔记(5):多对一关联映射

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>

你可能感兴趣的:(Hibernate学习笔记(5):多对一关联映射)