【hibernate框架】多对一单向关联(XML实现)

一个组有多个用户,一个用户只能属于一个组。
使用XML来实现多对一单项关联

Group.java:

package cn.edu.hpu.many2one;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

public class Group {
	private int id;
	private 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.java:

package cn.edu.hpu.many2one;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

public class User {
	private int id;
	private String name;
	private Group group;

	public Group getGroup() {
		return group;
	}
	public void setGroup(Group group) {
		this.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;
	}

}

User.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.edu.hpu.many2one">
    <class name="User" table="x_user" dynamic-update="true">
    	<!-- 主键 这里的主键名字刚好也是'id'-->
			<id name="id" column="id">
			    <generator class="native"></generator>
			</id>  

        <property name="name"></property>
        <many-to-one name="group" column="groupId"/>
    </class>
</hibernate-mapping>

Group.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.edu.hpu.many2one">
    <class name="Group" table="x_group" dynamic-update="true">
    	<!-- 主键 这里的主键名字刚好也是'id'-->
			<id name="id" column="id">
			    <generator class="native"></generator>
			</id>  

        <property name="name"></property> 

    </class>
</hibernate-mapping>

在hibernate.cfg.xml中配置:

<mapping resource="cn/edu/hpu/many2one/Group.hbm.xml"/>
<mapping resource="cn/edu/hpu/many2one/User.hbm.xml"/> 

建表语句:
alter table x_user 
        drop 
        foreign key FKD2372F32E3D521A

    drop table if exists x_group

    drop table if exists x_user

    create table x_group (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )

    create table x_user (
        id integer not null auto_increment,
        name varchar(255),
        groupId integer,
        primary key (id)
    )

    alter table x_user 
        add index FKD2372F32E3D521A (groupId), 
        add constraint FKD2372F32E3D521A 
        foreign key (groupId) 
        references x_group (id)
schema export complete

结果在x_user表里的groupId属性上加了指向group的id的外键。(如果groupId存的数不是属于x_group表中数据的任何一个id,那么就不会被保存而报错,这就是外键的精髓)

转载请注明出处:http://blog.csdn.net/acmman

时间: 2025-01-24 21:13:47

【hibernate框架】多对一单向关联(XML实现)的相关文章

【SSH系列】Hibernate映射-- 多对一单向关联映射

      在hibernate中非常重要的就是映射,在前面的博文中,小编简单的介绍了基本映射,基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.这个比较简单,但是基础知识还是需要好好掌握的哦,还有一些关联映射,比如user && group,她们之间的关系是一对多,我们知道一个用户只能属于一个组,但是一个组可以包好N多个用户,所以他们之间的关系就是多对一的关系,接着我们来看他们的对象模型以及关系模式.

【hibernate框架】多对多单向关联(XML实现)

什么情况下是多对多? 举个例子:一个老师可以教多个学生,每个学生也可以被多个老师教.这就是多对多的情况. 在数据库表中这种关系该怎么设计?很简单,加一张中间表. 设计模型: table_student id<int> <pk> table_teacher id<int> <pk> 中间表: T_S t_id<int> <pk,fk2> s_id<int> <pk,fk1> 比如老师2教学生1,在中间表中就存2,

Hibernate从入门到精通(十)多对多单向关联映射

上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的 相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映 射之前,首先看一下相关类图和代码,具体如下: public class Role { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id;

Hibernate从入门到精通(七)多对一单向关联映射

上次的博文Hibernate从入门到精通(六)一对一双向关联映射中我们介绍了一下一对一双向关联映射,本 次博文我们讲解一下多对一关联映射 多对一单向关联映射 多对一关联映射与一对一关联映射类 似,只是在多对一的指向端可以存在多个对象,在指向端加载的时候,同时加载被指向端. 多对一和 一对一的异同 对比一对一单向关联映射和多对一单向关联映射,两者的相同之处在于在指向端被加载 的时候,指向端会被一起加载进来,这一点从如下类的结构图和代码中看出.(以下只给出多对一相关图示和 代码,一对一图示和代码参考

hibernate5(9)注解映射[1]多对一单向关联

在博客网站中,我们可能需要从某一篇文章找到其所关联的作者,这就需要从文章方建立起对用户的关联,即是多对一的映射关系. 现在先看一个配置实例:我们的文章实体类 package com.zeng.model; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue;

Hibernate框架学习之四:关联映射那些事

前言 Hibernate关联关系与客观世界中具体的映射关系很类似,在进行数据库设计的时候常常需要考虑是一对多.多对一等类似的映射关系,这其中涉及数据库设计方面的知识.映射关系可以分为单向与双向两种,具体又包括一对多.多对一.一对一以及多对多四种.所以总共有八种映射关系.这里只介绍了XML配置文件的版本. 下面的配置文件的配置方式都以下面的两个持久化类作为模板: public class Person { private int id; private String name; private i

【hibernate框架】多对一单向关联(Annotation实现)

一个组有多个用户,一个用户只能属于一个组. 使用Annotation注解来实现多对一单项关联 Group.java: package cn.edu.hpu.many2one; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="t_grou

Hibernate学习(四)多对一单向关联映射

Hibernate对于数据库的操作,全部利用面向对象的思维来理解和实现的.一般的单独表的映射,相信大家都没有问题,但是对于一些表之间的特殊关系,Hibernate提供了一些独特的方式去简化它. 今天就来说说多对一的关联映射. 数据库中有多对一的关系,Hibernate自然也有对象的多对一的关联关系.比如用户和用户组,一个用户只属于一个组,一个组有多名用户.我们就可以说用户和用户组的关系就是多对一的关系.用对象的uml图表示一下: 在Hibernate中如何来实现呢?首先定义这两个实体类: pac

一口一口吃掉Hibernate(四)——多对一单向关联映射

      Hibernate对于数据库的操作,全部利用面向对象的思维来理解和实现的.一般的单独表的映射,相信大家都没有问题,但是对于一些表之间的特殊关系,Hibernate提供了一些独特的方式去简化它.       今天就来说说多对一的关联映射.       数据库中有多对一的关系,Hibernate自然也有对象的多对一的关联关系.比如用户和用户组,一个用户只属于一个组,一个组有多名用户.我们就可以说用户和用户组的关系就是多对一的关系.用对象的uml图表示一下:       在Hibernat