`

实体多对多

 
阅读更多

工具eclipse sqlserver2000

1.建立web工程bank 

  在src下建立包third third.test

在包third下建Employee.java Project.java 以及映射文件Employee.hbm.xml

Project.hbm.xml

在包third.test包下写测试类Demo.java

在工程下引入hibernate所要用的jar包,以及sqlserver驱动的jar包

2.Employee.java

package third;

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

public class Employee {
	private int employee_id;
	private String employee_name;
	private String employee_descr;
	private Set projs=new HashSet();	
	public Employee() {
		super();
	}
	public int getEmployee_id() {
		return employee_id;
	}
	public void setEmployee_id(int employee_id) {
		this.employee_id = employee_id;
	}
	public String getEmployee_name() {
		return employee_name;
	}
	public void setEmployee_name(String employee_name) {
		this.employee_name = employee_name;
	}
	public String getEmployee_descr() {
		return employee_descr;
	}
	public void setEmployee_descr(String employee_descr) {
		this.employee_descr = employee_descr;
	}
	public Set getProjs() {
		return projs;
	}
	public void setProjs(Set projs) {
		this.projs = projs;
	}
	

}

 

Employee.hbm.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="third">
	<class name="Employee" table="tbl_emp">
	<id name="employee_id" >
		<generator class="assigned" />
	</id>
	
	<property name="employee_name" >
	</property>
	
	<property name="employee_descr" >
	</property>
<!-- 本类属性projs,与表 tbl_proj多对多关系,需要经过中间过渡表r_emp_proj-->
<set name="projs" table="r_emp_proj" inverse="true">
<key column="r_emp_id"/>
<many-to-many class="Project" column="r_proj_id"/>
</set>
  
	</class>
	</hibernate-mapping>
			

 

3.Project.java

package third;

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

public class Project {
	private int project_id;
	private String project_name;
	private String project_descr;
	private Set emps=new HashSet();
	public Project() {
		super();
	}	
	public Set getEmps() {
		return emps;
	}
	public void setEmps(Set emps) {
		this.emps = emps;
	}

	public int getProject_id() {
		return project_id;
	}
	public void setProject_id(int project_id) {
		this.project_id = project_id;
	}
	public String getProject_name() {
		return project_name;
	}
	public void setProject_name(String project_name) {
		this.project_name = project_name;
	}
	public String getProject_descr() {
		return project_descr;
	}
	public void setProject_descr(String project_descr) {
		this.project_descr = project_descr;
	}
	

}

 

Project.hbm.xml

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="third">
	<class name="Project" table="tbl_proj">
	<id name="project_id" >
		<generator class="native" />
	</id>
	
	<property name="project_name" >
	</property>
     
     <property name="project_descr" >
	</property>
	<!-- 本类属性emps与对象Employee是多对多关系,需要经过中间过渡表r_emp_proj -->
    <!--  -->
   <set name="emps" table="r_emp_proj">
   <key column="r_proj_id" />
   <many-to-many  class="Employee"  column="r_emp_id"/>
   </set>
   
	</class>
	</hibernate-mapping>
	
	
	

 4.Demo.java

package third.test;

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

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import third.Employee;
import third.Project;

public class Demo {
@Test
public void tt(){
	Configuration cfg=new Configuration();
	cfg.configure();
	SessionFactory se=cfg.buildSessionFactory();
	Session s=se.openSession();
	Transaction tr=s.beginTransaction();
	try{
		Project p=new Project();
		Employee em=new Employee();
		
		p.setProject_name("智慧供水平台");
		p.setProject_descr("集成所有供水业务");
		
		Set pros=new HashSet();
	    pros.add(p);
	    
		em.setEmployee_id(02);
		em.setEmployee_name("飞鸟");
		em.setEmployee_descr("开发");
		
	    Set ems=new HashSet();
	    ems.add(em);
	    p.setEmps(ems);
	    em.setProjs(pros);
	    
	    s.save(p);
	    s.save(em);
	    tr.commit();	
	}catch(Exception e){
		if(tr!=null){
			tr.rollback();
		}
	}
	finally{
		s.close();
	}
	
	
}
}

 

分享到:
评论

相关推荐

    hibernate 映射关系学习入门 多对多实体映射

    本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...

    13_jpa多对多双向关联实体定义与注解

    本篇将详细讲解JPA中的一个关键概念——多对多双向关联,并通过实体定义与注解设置来深入理解这一特性。"13_传智播客JPA详解"系列教程涵盖了JPA的诸多方面,而"13_传智播客JPA详解_JPA中的多对多双向关联实体定义与...

    kotlin recyclerview 多布局 多实体

    在适配器中,我们需要对这些实体类进行处理,通常是通过泛型或者接口来实现。 使用泛型,你可以定义一个通用的适配器,如下: ```kotlin class MultiTypeAdapter(...): RecyclerView.Adapter() { // ... } ``` ...

    JPA中的多对多双向关联实体定义与注解设置

    在Java Persistence API (JPA) 中,多对多(ManyToMany)关系是表示两个实体之间复杂关联的一种方式。这种关联允许一个实体实例可以与多个其他实体实例相关联,反之亦然。例如,一个学生可以选修多门课程,一门课程...

    C#实体类和实体类集合的自动排序

    接下来是实体类集合,它是多个实体类对象的集合,通常被用作数据访问层与业务逻辑层之间的数据传输对象。在C#中,可以使用List、ArrayList或其他集合类型来实现。 自动排序的关键在于实现接口,这里提到了四个接口...

    SAP的4400多个实体类型清单

    这个"4400多个实体类型清单"为我们揭示了SAP系统中庞大的数据模型和业务对象的概貌。实体类型是SAP中的核心概念,它们代表了系统中的具体业务实体,如客户、供应商、物料、订单等。理解这些实体类型对于深入掌握SAP...

    hibernate学习入门一对多实体映射源码

    在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...

    基于多任务深度学习的实体和事件联合抽取模型.docx

    "基于多任务深度学习的实体和事件联合抽取模型" 本文旨在探讨基于多任务深度学习的实体和事件联合抽取模型,以提升...同时,本文也对命名实体识别与事件检测的相关性进行了分析,并阐述了多任务学习的最新研究进展。

    GreenDao保存实体类套实体类

    对于嵌套实体类,我们可以通过定义一对多或一对一的关系来处理。 1. **定义实体类**:在开始之前,确保已经正确地引入了GreenDao库。创建两个实体类,例如`User`和`Address`。`User`类可能包含用户的基本信息,如...

    ChineseNER-实体抽取_实体抽取工具_文章实体抽取_自然语言处理_ChineseNERMSRA_

    4. **序列标注**:模型根据学习到的特征对每个词汇进行标注,确定其是否为实体及具体的实体类型。 5. **后处理**:对识别出的实体进行合并、修正,以提高整体的准确性和完整性。 ChineseNERMSRA的特点在于其深度...

    自然语言处理数据集-5 万多条中文命名实体识别标注数据-中文命名实体识别.rar

    因此,这个数据集的创建者可能采用了诸如词性标注、上下文信息、规则匹配等方法对实体进行标记。 数据集的结构通常包括文本内容和对应的标注信息。在这个案例中,"自然语言处理数据集-5 万多条中文命名实体识别标注...

    注解框架实体类映射

    如@Entity表示该类为数据库表的实体,@Table定义表名,@Id标识主键,@GeneratedValue指定主键生成策略,@Column定义字段与列的对应,@OneToMany、@ManyToOne、@OneToOne和@ManyToMany则用于处理多对一、一对多、一对...

    Hibernate实体层设计

    Hibernate支持一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)和多对多(@ManyToMany)四种关系映射。例如,一个用户可以有多个订单,订单也可以属于多个用户,这种关系就需要用到@OneToMany和@...

    数据库 实体关系

    - 定义:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体集B具有多对多联系。 - 示例:一门...

    C#实体类自动生成器

    此外,一些生成器还提供了高级功能,例如支持多态、继承、映射关系(如一对一、一对多、多对多)等复杂数据结构,以及自定义模板以满足特定需求。 在实际开发中,合理利用实体类自动生成器可以显著提升开发效率,...

    地理实体数据规范

    #### 三、地理实体数据的多尺度表达与基本实体内容 **7. 地理实体数据的多尺度表达** 为了适应不同比例尺下的地理信息展示需求,地理实体数据需要具备多尺度表达能力。这意味着同一个地理实体在不同比例尺下可能有...

    多语言实体链接工具包YahooFEL.zip

    Fast Entity Linker 用于训练模型,以将实体链接到文档和查询中的知识库(维基百科),是一款无监督、准确、可扩展多语言实体名称识别和链接系统,同时包含英语、西班牙语和中文数据包。在算法上,使用了实体嵌入,...

Global site tag (gtag.js) - Google Analytics