`
Silmon
  • 浏览: 54535 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Hibernate一对多关联关系

阅读更多

关系表

create table provinces(
p_id varchar(32) primary key,
p_name varchar(40)
);
create table cities(
c_id varchar(32)primary key,
c_name varchar(40),
p_c_id varchar(32),
 foreign key(p_c_id)references provinces(p_id)
 
);

 

映射文件

<hibernate-mapping>
	<class name="pojo.Cities" table="cities" catalog="hibernate">
		<id name="CId" type="java.lang.String">
			<column name="c_id" length="32" />
			<generator class="uuid.hex" />
		</id>
		<many-to-one name="provinces" class="pojo.Provinces"
			fetch="select" cascade="none">
			<column name="p_c_id" length="32" />
		</many-to-one>
		<property name="CName" type="java.lang.String">
			<column name="c_name" length="40" />
		</property>
	</class>
	<class name="pojo.Provinces" table="provinces"
		catalog="hibernate">
		<id name="PId" type="java.lang.String">
			<column name="p_id" length="32" />
			<generator class="uuid.hex" />
		</id>
		<property name="PName" type="java.lang.String">
			<column name="p_name" length="40" />
		</property>
		<set name="citieses" inverse="true" cascade="all">
			<key>
				<column name="p_c_id" length="32" />
			</key>
			<one-to-many class="pojo.Cities" />
		</set>
	</class>
</hibernate-mapping>

 

CityDAO

package dao;

import java.util.Iterator;

import org.hibernate.Query;
import org.hibernate.Session;

import config.HibernateSessionFactory;

import pojo.Cities;
import pojo.Provinces;

/*
 * ORMapping 一对多双向关联
 * */
public class CityDao {
    public void insertAll() {// 测试添加
	Provinces provinces = new Provinces();
	Cities cities1 = new Cities();
	Cities cities2 = new Cities();
	provinces.setPName("河南");
	provinces.getCitieses().add(cities1);
	provinces.getCitieses().add(cities2);
	cities1.setCName("郑州");
	cities2.setCName("开封");
	cities1.setProvinces(provinces);
	cities2.setProvinces(provinces);
	Session session = HibernateSessionFactory.getSession();
	session.beginTransaction();
	session.save(provinces);
	session.beginTransaction().commit();

    }

    public void insertCity() {// 测试单独添加
	Session session = HibernateSessionFactory.getSession();
	Cities cities = new Cities();
	String hql = "from Provinces where PName=? ";
	Query query = session.createQuery(hql);
	query.setString(0, "河南");
	Provinces provinces = (Provinces) query.uniqueResult();
	cities.setCName("洛阳");
	cities.setProvinces(provinces);
	provinces.getCitieses().add(cities);

	session.beginTransaction();
	session.save(provinces);
	session.beginTransaction().commit();
	session.close();
    }

    public void sel(String pName) {// 测试查询
	Session session = HibernateSessionFactory.getSession();
	Cities cities = new Cities();
	Provinces provinces = new Provinces();
	String hql = "from Provinces where PName=?";
	Query query = session.createQuery(hql);
	query.setString(0, pName);
	provinces = (Provinces) query.uniqueResult();
	System.out.println(provinces.getPName());
	System.out.println(provinces.getCitieses().size());
	Iterator iterator = provinces.getCitieses().iterator();
	while (iterator.hasNext()) {
	    cities = (Cities) iterator.next();

	    System.out.println(cities.getCName());
	}
    }

    public void update() {
	Session session = HibernateSessionFactory.getSession();
	/*
	 * 省份更改
	 * Cities cities = new Cities();

	Provinces provinces = new Provinces();
	String hql = "from Provinces where PName=?";
	Query query = session.createQuery(hql);
	query.setString(0, "台湾");
	provinces = (Provinces) query.uniqueResult();
	provinces.setPName("河南");
	session.beginTransaction();
	session.saveOrUpdate(provinces);
	session.beginTransaction().commit();
	session.close();
	*/ 
	Provinces provinces = new Provinces();//城市更改
	
	Query query = session.createQuery("from Provinces where PName=?");
	query.setString(0, "河南");
	provinces=(Provinces) query.list().get(0);
	Query q=session.createQuery("from Cities where CName=?");
	q.setString(0, "郑州");
	Cities cities=(Cities) q.list().get(0);
	System.out.println(cities.getCName());
	cities.setCName("南阳");
	cities.setProvinces(provinces);
	provinces.getCitieses().add(cities);
	session.beginTransaction();
	session.save(provinces);
	session.beginTransaction().commit();
	session.close();
	
    }
    public void delete(){
	Session session=HibernateSessionFactory.getSession();
	
	Query  query=session.createQuery("from Provinces p where p.PName=? ");
	query.setString(0, "河南");
	Provinces provinces=(Provinces) query.list().get(0);
	session.beginTransaction();
	session.delete(provinces);
	session.beginTransaction().commit();
	session.close();
    }

    public static void main(String[] args) {
	CityDao cityDao = new CityDao();
	// cityDao.insertAll();
	 cityDao.insertCity();
	 cityDao.sel("河南");
	//cityDao.update();
	//cityDao.delete();
    }

}

 

分享到:
评论
1 楼 only_java 2009-11-13  
测试中update方法中,session.save(provinces);  provinces实例是po状态的啊,怎么用save?应该用update吧?既然在provinces的映射文件中使用了inverse=true,就表明他俩的关系由city来维护啊,直接update(city)不就行了吗?

相关推荐

    Hibernate一对多关联关系小demo

    本篇文章将深入探讨“Hibernate一对多关联关系”这一主题,并结合提供的"hibernateOneToMany"压缩包文件,展示如何实现一个简单的一对多关联关系的小型示例。 首先,我们需要理解Hibernate中的一对多关联关系。在...

    Hibernate映射一对多关联关系

    ### Hibernate映射一对多关联关系 #### 知识点概览 - **概念解析**:一对多(One-to-Many)关联关系的概念及其在Hibernate中的实现方式。 - **域模型设计**:创建具有一个实体与多个实体关联的域模型。 - **关系...

    hibernate一对一关联关系

    在实体类之间,Hibernate支持多种关联关系,包括一对一(One-to-One)、一对多(One-to-Many)和多对多(Many-to-Many)。本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,...

    hibernate关联关系2

    一、Hibernate一对多关联关系 在关系型数据库中,一对多关联是指一个表中的记录可以与另一个表中的多个记录相关联。例如,一个学生可以有多个课程,一个课程则可以被多个学生选修。在Hibernate中,这种关系通过在...

    hibernate多对一单向关联关系实现源码

    在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    hibernate一对多关联映射(单向关联)

    这篇博客文章“hibernate一对多关联映射(单向关联)”将深入讲解如何配置和使用这种映射关系。 在单向关联中,只有一个实体知道另一个实体的存在,也就是说,只有父实体("一"的一端)有对子实体("多"的一端)的...

    Hibernate多对多关联关系demo

    本示例"Hibernate多对多关联关系demo"将深入探讨如何在实际开发中设置和操作这种关系。我们将探讨以下关键知识点: 1. **映射配置**: 在Hibernate中,多对多关联关系通过`&lt;many-to-many&gt;`标签来实现。你需要在两...

    hibernate多对一关联关系

    在Java的持久化框架Hibernate中,"多对一"关联关系是一种常见的对象关系映射(ORM)设计,它表示一个实体(子项)可以与多个其他实体(父项)相关联,而每个父项可能被多个子项引用。在数据库层面,这通常对应于一个...

    Hibernate ORM - 一对多双向关联关系

    这个压缩包文件“HibernateORM”很可能包含了关于如何在实际项目中设置和使用Hibernate一对多双向关联的示例代码、配置文件或者详细教程。通过学习这些材料,开发者能够深入理解如何在Java应用中利用Hibernate来处理...

    hibernate实现多对多关联关系源码

    在Java的持久化框架Hibernate中,多对多...总之,理解并正确实现Hibernate的多对多关联关系对于开发高效、健壮的Java应用至关重要。通过源码学习,开发者可以更好地掌握数据关系的管理和持久化操作,从而提升软件质量。

    Hibernate一对多关联映射(注解)

    总结一下,Hibernate的一对多关联映射通过注解方式定义了对象间的关联关系,使得我们在编程时能够以面向对象的方式操作数据,而底层数据库的操作则由Hibernate自动完成。这种方式大大提高了开发效率,同时也降低了...

    Hibernate一对一,一对多,多对多实例

    总之,理解并熟练掌握Hibernate的一对一、一对多和多对多关联关系,对于提升Java EE应用的开发效率和代码质量至关重要。通过实例化这些关系,开发者可以更好地管理和操作数据库中的复杂数据结构,从而实现更灵活和...

    hibernate多对一关联demo

    本教程将详细解释如何在Hibernate中实现多对一的关联关系,以及如何通过一个实际的示例来演示这一过程。 【描述】:“博客地址:http://blog.csdn.net/smilefyx/article/details/48603923” 在上述博客文章中,...

    Hibernate一对多使用非主键关联设置

    在保存或更新实体时,Hibernate会自动处理一对多关联的插入或更新。 通过这种方式,我们就可以在Hibernate中设置一对多非主键关联,使得在操作部门和员工数据时,能够方便地维护它们之间的关系。这种方法允许我们在...

    hibernate一对多,多对一,一对多双向关联

    本主题将主要聚焦在一对一和一对多关联。 2. **关联的方向性:** 关联可以是单向或双向的。单向关联只能从一个实体访问另一个,而双向关联允许两个实体之间互相访问。 3. **@OneToOne, @OneToMany, @ManyToOne ...

    hibernate外键实现一对一双向关联关系源码

    本主题将深入探讨如何使用Hibernate实现一对一双向关联关系,并通过源码解析这一过程。 一对一双向关联关系指的是两个实体类之间存在一对一的关系,且在各自的类中都可以直接访问对方。这种关联可以通过注解或XML...

    Hibernate一对多关联实例

    本文将详细解析" Hibernate一对多关联实例 ",并涵盖关联的保存(save)、删除(delete)、查询(select)和更新(update)操作。 一、一对多关联概念 在数据库设计中,一对多关联表示一个表中的记录可以与另一个表中的多个...

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    Hibernate一对多关联

    标题 "Hibernate一对多关联" 涉及到的是Java持久化框架Hibernate中的一个重要关系映射概念,这在开发企业级应用时非常常见。在数据库设计中,一对多关系表示一个表(父表)中的记录可以与另一个表(子表)中的多个...

Global site tag (gtag.js) - Google Analytics