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

用户和组的关联,一个用户只能属于一个组,一个组可以拥有多个用户

User.java:

package cn.edu.hpu.one2many;

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

@Entity
@Table(name="m_user")
public class User {
	private int id;
	private String name;
	private Group group;

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

}

Group.java:

package cn.edu.hpu.one2many;

import java.util.HashSet;
import java.util.Set;

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

@Entity
@Table(name="m_group")
public class Group {
	private int id;
	private String name;
	private Set<User> users=new HashSet<User>();
	//选择set的原因是因为,set互相之间不会有重复的
	//跟数据库模型比较匹配

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

	//只要有双向就要指定制定一个属性(mapedby)
	//不指定的话会有两个相同的字段产生
	@OneToMany(mappedBy="group")
	public Set<User> getUsers() {
		return users;
	}
	public void setUsers(Set<User> users) {
		this.users = users;
	}

}

在hibernate.cfg.xml中添加:
<mapping class="cn.edu.hpu.many2many.Group"/>
<mapping class="cn.edu.hpu.many2many.User"/>

生成的sql语句:
alter table m_user 
        drop 
        foreign key FKBF71E05DAB4F2BAC

    drop table if exists m_group

    drop table if exists m_user

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

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

    alter table m_user 
        add index FKBF71E05DAB4F2BAC (groupId), 
        add constraint FKBF71E05DAB4F2BAC 
        foreign key (groupId) 

        references m_user (id)

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

时间: 2024-10-30 12:46:53

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

hibernate5(11)注解映射[3]一对多多对一双向关联

在上两篇文章里,我们详细地分别讲解了一对多和多对一的单向关联配置的具体属性含义,在这一篇文章里,我们完成两者的的整合建立双向关联. 在实际的博客网站中,我们可能需要根据文章读取作者(用户)信息,但肯定也要让用户能获取自己的文章信息,针对这种需求,我们可以建立文章(多)对用户(一)的双向关联映射. 下面先看实例映射配置文件: /********************一方配置User********************/ @Entity//声明当前类为hibernate映射到数据库中的实体类

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

单项主键关联指的是:husband和wife之间有关联关联的.但是是用主键做关联的,说白了就是husband的id会参考wife的id(husband的id是1,n那么它所对应的wife的id也是1). Husband.java: package cn.edu.hpu.one2one; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; imp

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

上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我 们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一下相关类图和代码,具体如下: public class Role { private int id; private String name; private Set users; public int getId() { return id; } public void setId(int id

java中Hibernate多对多双向关联的配置

 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任  Hibernate的双向多对多关联有两种配置方法:那我们就来看看两种方案是如何配置的.          一.创建以各自类为类型的集合来关联       1.首先我们要在两个实体类(雇员<Emploee>.工程<Project>)中各自给对方添

【hibernate框架】一对多(多对一)双向CRUD-Cascade1

下面对一对多(多对一)的关联关系的CRUD进行测试. 这里用的是注解Annotation User.java: package cn.edu.hpu.one2many; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.T

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

多对多的双向关联:(非常少用) 通过老师可以知道他教了多少学生,这是单项多对多.而如果同时通过学生知道有多少个老师教他,那么就是多对多双向的关联. XML实现: Student.java: package cn.edu.hpu.many2many; import java.util.HashSet; import java.util.Set; public class Student { private int id; private String name; private Set<Teach

【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图表示一下:       在Hibernat

【hibernate框架】一对多(多对一)双向CRUD-Fetch2

继续对Fetch注解进行测试 User.java: package cn.edu.hpu.one2many; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persi