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

来源:互联网 发布:斗鱼公司 知乎 编辑:程序博客网 时间:2024/05/21 11:38

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>

原创粉丝点击