`

Hibernate学习之----------多对一与一对多

阅读更多

 

在hibernate中经常遇到用户组与用户关系的映射,在这里其实是一对多或多对一的关系,这个用户组与用户可以用下面语句描述:

一个用户组可包含很多用户,但一个用户只能属于一个用户组

 

先来讨论在用户表里嵌入用户组id的情况:

上代码(采用注解,后面有xml配置说明):

package suse.ly.domain;

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

/**
 * 用户组类
 * @author ly-suse
 *
 */
@Entity
@Table(name="t_group")
public class Group {

	private int id;
	
	private String name;

	@Id
	@GeneratedValue
	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;
	}
	
}

 用户类;

package suse.ly.domain;

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

/**
 * 用户类
 * @author ly-suse
 *
 */
@Entity
@Table(name="t_user")
public class User {

	private int id;
	
	private String name;

	private Group group;
	
	@ManyToOne(fetch=FetchType.LAZY)  //(多对一,每个用户组可以包含多个用户)
	public Group getGroup() {
		return group;
	}

	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public void setGroup(Group group) {
		this.group = group;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

 

 

然后运行测试:

new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);

 

运行结果:

alter table t_user drop foreign key FKCB63CCB6C41AE897
drop table if exists t_group
drop table if exists t_user
create table t_group (id integer not null auto_increment, name varchar(255), primary key (id))
create table t_user (id integer not null auto_increment, name varchar(255), group_id integer, primary key (id))
alter table t_user add index FKCB63CCB6C41AE897 (group_id), add constraint FKCB63CCB6C41AE897 foreign key (group_id) references t_group (id)

从结果可以看出t_user表里含有group_id这个外键

 

xml配置如下:

Group.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        <hibernate-mapping>
        	<class name="suse.ly.domain.Group" >
        		<id>
        			<generator class="native"></generator>
        		</id>
        		
        		<property name="name"></property>
        	</class>
        </hibernate-mapping>

 User.hbm.xml

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        <hibernate-mapping>
        	<class name="suse.ly.domain.User" >
        		<id>
        			<generator class="native"></generator>
        		</id>
        		
        		<many-to-one name="group" column="groupId"></many-to-one>
        	</class>
        </hibernate-mapping>

 运行结果如上一样。

 

 

分享到:
评论

相关推荐

    hibernate-release-5.2.10

    7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@ManyToMany)关系的映射,方便处理对象间的关联关系。 8. **延迟加载**:Hibernate的懒加载策略可以在需要时才...

    hibernate-release-5.0.7.Final.zip

    在2016年,传智播客黑马程序员发布的Hibernate教程中,特别选用了Hibernate 5.0.7.Final版本,这个版本在功能和性能上都有显著提升,是学习和开发中非常值得参考的一个里程碑。 1. Hibernate 5.0.7.Final概述 ...

    最新 hibernate-release-4.2.13.Final.tgz

    2. 探索映射:深入理解实体类与数据库表之间的映射机制,包括一对一、一对多、多对一、多对多关系的配置。 3. 深入查询:掌握HQL和Criteria API的高级用法,如分页、排序、子查询等。 4. 事务管理:了解Hibernate的...

    hibernate-distribution-3.6.0

    1. **对象关系映射(ORM)**:Hibernate通过XML配置文件或注解,将Java类与数据库表进行映射,使得我们可以像操作普通Java对象一样操作数据库,减少了对SQL的直接依赖,提高了代码的可读性和可维护性。 2. **...

    hibernate-orm-3.3源码

    3.3 版本在前代基础上进行了多方面的改进,包括性能优化、新的查询语言 HQL(Hibernate Query Language)以及对 JPA(Java Persistence API)的支持等。 二、核心组件 1. SessionFactory:它是 Hibernate 的核心,...

    HIBERNATE:Hibernate 学习一--注解方式自动建表

    这篇博客"Hibernate学习一--注解方式自动建表"主要探讨了如何使用Hibernate的注解来实现数据库表的自动化创建。 在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被...

    hibernate-distribution-3.6.0.Final-dist

    6. **关联映射**:包括一对一、一对多、多对一、多对多的关系映射,允许对象之间的复杂关系映射到数据库表。 7. **延迟加载**:Hibernate允许在真正需要时才加载关联对象,减少内存消耗和提高性能。 ### 使用...

    hibernate-distribution-3.5.6-Final.rar

    3. 支持更多的数据库:除了常见的MySQL、Oracle等,Hibernate 3.5.6还支持更多数据库系统,包括PostgreSQL、SQL Server等,扩大了其应用范围。 4. 性能优化:此版本对缓存机制进行了优化,提高了查询效率,同时改进...

    hibernate-orm-master.zip

    Hibernate支持多种关联映射,包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)。这些关联可以通过定义外键或使用中间表来实现,使得对象间的复杂关系得以轻松处理。 ...

    hibernate-release-5.0.11.Final

    Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,为开发者提供了便捷的数据库操作方式,极大地简化了Java应用中的数据访问层代码。在5.0.11.Final版本中,Hibernate引入了一系列的改进和优化,使其...

    hibernate-jpa-2.1-api-1.0.0.Final.jar

    《深入理解Hibernate-JPA 2.1 API:源码解析与应用实践》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而Hibernate对Java Persistence API (JPA) 的支持,使得开发者...

    hibernate-validator-4.1.0.Final.rar

    Hibernate Validator是Hibernate项目的一个重要组成部分,它是一个基于JSR-303(Bean Validation)规范的实现,提供了强大的Java Bean数据验证功能。这次我们关注的是Hibernate Validator的4.1.0.Final版本,该版本...

    hibernate-distribution-3.6.6.Final.tar.gz

    `3.6.6.Final`表示这是Hibernate框架的一个稳定版本,Final表示这是一个最终发布版,意味着经过了多轮测试和修正,具有较高的稳定性和兼容性。`tar.gz`是一种常见的文件打包格式,用于在Unix/Linux环境下压缩和归档...

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    1. 实体类设计:使用注解定义实体类,如用户(User)和角色(Role)之间的多对多关系: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) ...

    hibernate-annotations-3.4.0.GA.chm中文版

    3. **关系映射注解**:@OneToOne、@OneToMany、@ManyToOne和@ManyToMany分别用于一对一、一对多、多对一和多对多的关系映射,它们可以配合@JoinColumn或@JoinTable进一步配置关联细节。 4. **继承注解**:@...

    hibernate-release-4.3.5

    在`hibernate-release-4.3.5.Final`中,一个关键的改进是对JPA 2.1规范的支持,这包括了新的特性如多租户、存储过程调用以及对Java 8日期时间API的支持。多租户功能允许在一个数据库实例中管理多个独立的应用数据,...

    hibernate-release-5.2.11.Final.zip

    10. **关联映射**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)的映射,通过`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`等注解实现。 11. **懒加载和...

    hibernate-commons-annotations-3.1.0.GA

    例如,@ManyToOne表示一对多的关系,@OneToOne表示一对一的关系,@OneToMany则用于处理多对一的关联,而@ManyToMany则用于处理多对多的复杂关联。这些注解使得对象关系的映射变得直观且易于维护。 此外,该版本还...

    hibernate-release-5.0.6.Final

    Hibernate是一种开源的ORM框架,它允许开发者使用面向对象的方式处理数据库,将Java对象与数据库表进行映射,从而降低了数据库操作的复杂性。通过提供API和配置文件,Hibernate实现了数据的持久化,使得程序能够轻松...

    hibernate-validator-5.2.4

    Hibernate Validator 5.2.4.Final是该框架的一个稳定版本,包含了多项功能和改进。 首先,我们来了解Bean Validation。这是一个用于验证业务对象属性的框架,它允许开发者定义一套规则,这些规则会在数据被处理前...

Global site tag (gtag.js) - Google Analytics