`
tianjun309
  • 浏览: 368289 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate_OneToMany_CURD_demo_and_note

阅读更多

note:

(3)curd 增删改查
(4)在映射po类里面,有set的为一的一方。
(5)Address.hbm.xml
        <!-- 多对一的关键配置 -->
        <many-to-one name="man" class="dao.po.Man" fetch="select">
            <column name="manid"/>
        </many-to-one>

Man.hbm.xml
     <!-- 一对多的关键配置 -->
        <!-- 一般在"一"的这一方设置inverse="false" 并且只能在set一方

来设置。加上cascade 这样可以级联操作 -->
        <set name="addresses" inverse="false" cascade="all">
            <key>
                <column name="manid" />
            </key>
            <one-to-many class="dao.po.Address" />
        </set>
(6)在级联增加时候,先添加一的一方,否则会多出不少update的sql语句。
(7)如果级联删除就纯删除一的一方,在多的一方会出现脏数据。
(8)如果在级联更新时候,不将一的一方传入,则会在之后hibernate生成

的update语句中将多的一方外键值设为null.
(9)如果在session关闭之后要用级联数据,需要在session关闭之前调用

Hibernate.initialize(...)来放内存中先。

 

 

=

spring and hiberante
(1)
	private static void find()
	{
		//下面如果直接获取address会出现session关闭,懒加载的

问题
		//但是如果用下面的方法,又觉得代码敲太多了。
		List<Man> manList = hibernateTemplate.find("from 

Man");
		Man man = manList.get(0);
		List<Address> addressList = 

hibernateTemplate.findByNamedParam("from Address address where manid 

= :manid", "manid", man.getId());
		System.out.println(addressList.size());
		
		//这种方法不好的地方在于调用了session,会出现session

关闭的问题。
		Session session = 

hibernateTemplate.getSessionFactory().openSession();
		Query query = session.createQuery("from Man");
		List<Man> manList = query.list();
		System.out.println(manList.get(0).getAddresses

().size());
		session.close();
	}

 

=

(2)spring配置文件里面的show_sql写法。
<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					

org.hibernate.dialect.SQLServerDialect
				</prop>
				<prop key="hibernate.show_sql">
					true
				</prop>
			</props>
		</property>

 

code:

package com.test.go;

import java.util.List;

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

import com.test.Address;
import com.test.Man;
import com.test.util.MyHibernateTemplate;

public class OntoMany extends MyHibernateTemplate
{
	public static void main(String[] args)
	{
//		add();
//		delete(26);
//		update(35);
		find();
	}
	
	private static void add()
	{
		Man man = new Man();
		man.setName("tianjun");
		
		Address temp1 = new Address();
		temp1.setAddressname("123");
		temp1.setMan(man);
		
		Address temp2 = new Address();
		temp2.setAddressname("3333");
		temp2.setMan(man);
		
		Address temp3 = new Address();
		temp3.setAddressname("fa");
		temp3.setMan(man);
		
		Address temp4 = new Address();
		temp4.setAddressname("h");
		temp4.setMan(man);
		hibernateTemplate.saveOrUpdate(man);
		hibernateTemplate.saveOrUpdate(temp1);
		hibernateTemplate.saveOrUpdate(temp2);
		hibernateTemplate.saveOrUpdate(temp3);
	}
	
	private static void delete(int id)
	{
		Man man = new Man();
		man.setId(id);
		hibernateTemplate.delete(man);
	}
	
	private static void update(int id)
	{
		Address temp = new Address();
		temp.setId(id);
		temp.setAddressname("gga");
		Man man = new Man();
		man.setId(27);
		temp.setMan(man);
		hibernateTemplate.saveOrUpdate(temp);
		
	}
	
	private static void find()
	{
		//下面如果直接获取address会出现session关闭,懒加载的问题
		//但是如果用下面的方法,又觉得代码敲太多了。
//		List<Man> manList = hibernateTemplate.find("from Man");
//		Man man = manList.get(0);
//		List<Address> addressList = hibernateTemplate.findByNamedParam("from Address address where manid = :manid", "manid", man.getId());
//		System.out.println(addressList.size());
		
		//这种方法不好的地方在于调用了session,会出现session关闭的问题。
//		Session session = hibernateTemplate.getSessionFactory().openSession();
//		Query query = session.createQuery("from Man");
//		List<Man> manList = query.list();
//		System.out.println(manList.get(0).getAddresses().size());
//		session.close();
	}
}

 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

	<!-- 配置数据源 -->
	<bean id="SQLCOOL"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName"
			value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
		</property>
		<property name="url"
			value="jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=test">
		</property>
		<property name="username" value="sa"></property>
		<property name="password" value="130727"></property>
	</bean>

	<!-- 配置session工厂 -->
	<bean id="CoolSessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="SQLCOOL" />
		</property>
		<property name="mappingResources">
			<list>
				<value>com/test/T1.hbm.xml</value>
				<value>com/test/T2.hbm.xml</value>
				<value>com/test/Boy.hbm.xml</value>
				<value>com/test/Host.hbm.xml</value>
				<value>com/test/Man.hbm.xml</value>
				<value>com/test/Address.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.SQLServerDialect
				</prop>
				<prop key="hibernate.show_sql">
					true
				</prop>
			</props>
		</property>
	</bean>

	<!-- 配置Hibernate模板类 -->
	<bean id="hibernateTemplate"
		class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory">
			<ref bean="CoolSessionFactory" />
		</property>
		<property name="allowCreate">
			<value>true</value>
		</property>
	</bean>
</beans>

 

 

分享到:
评论

相关推荐

    C#例子代码 A0622_EF_OneToMany

    C#例子代码 A0622_EF_OneToManyC#例子...A0622_EF_OneToManyC#例子代码 A0622_EF_OneToManyC#例子代码 A0622_EF_OneToManyC#例子代码 A0622_EF_OneToManyC#例子代码 A0622_EF_OneToManyC#例子代码 A0622_EF_OneToMany

    JPA_OneToMany学习教程

    "JPA_OneToMany"是JPA中的一个关键概念,涉及实体之间的关联关系,特别是在处理一对多关系时。本教程将深入探讨JPA中的OneToMany映射关系,以及如何在实际开发中有效地应用。 1. **OneToMany关系**:在关系数据库中...

    hibernate_second2项目源码

    【hibernate_second2项目源码】是一个基于Hibernate框架的示例项目,它在前一个项目的基础上进行了扩展,特别引入了级联保存的功能。在这个项目中,我们将深入探讨Hibernate的级联操作,以及如何实现数据的级联保存...

    Hibernate_3.2.0_Reference_zh_CN.rar hibernate中文api

    《Hibernate 3.2.0 参考指南中文版》是Java开发人员深入理解Hibernate ORM框架的重要参考资料。Hibernate是一款开源的对象关系映射(ORM)工具,它为Java开发者提供了便捷的方式来管理数据库操作,使得开发者无需...

    hibernate_onetoone实例

    尽管这个文件名“Hibernate_onetomany_Oracle实例 12.27”看起来像是一个关于一对多关系的示例,而不是一对一,我们可以假设它可能是错误的,或者包含了一个包含一对一和一对多关系的综合示例。通常,一对一关系是指...

    hibernate_-annotations_中文帮助文档

    《Hibernate Annotations 中文帮助文档》提供了关于如何在Java应用程序中使用Hibernate ORM框架进行数据库映射的详细指南。Hibernate Annotations是Hibernate框架的一部分,它允许开发者使用Java注解来定义对象关系...

    hibernate_4.1.6.Final-api

    10. **关联映射**:Hibernate支持一对一、一对多、多对一、多对多等各种关联关系的映射,如@OneToOne、@OneToMany、@ManyToOne、@ManyToMany等注解。 综上所述,Hibernate 4.1.6.Final API为Java开发者提供了强大而...

    hibernate_min_lib_3.5.zip

    《Hibernate框架核心库3.5版本详解》 Hibernate,作为Java世界中一款极其重要的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者能够以面向对象的方式来处理数据库事务。本文将深入探讨在Hibernate ...

    Hibernate之第2解之-hibernate_demo_1_annotation

    【标题】"Hibernate之第2解之-hibernate_demo_1_annotation"主要涵盖了使用Hibernate框架进行对象关系映射(ORM)的实践,特别是基于注解的方式。在这个教程中,我们将深入探讨如何利用Java注解来配置Hibernate实体...

    48882037Hibernate_API_Chinese

    【标题】"48882037Hibernate_API_Chinese" 指的是一部关于Hibernate中文API的资源,这通常是一份详细解释Hibernate框架各种功能和方法的文档,旨在帮助中文用户更好地理解和使用Hibernate。Hibernate是一个开源的...

    Hibernate之第3解之-hibernate_hibernate_many2one_1

    《深入理解Hibernate:第三解——Many-to-One关系映射实战》 在Java世界里,ORM(Object-Relational Mapping)框架的出现极大地简化了数据库与Java对象之间的交互,而Hibernate作为其中的佼佼者,更是备受开发者青睐...

    hibernate_annotations.rar

    【hibernate_annotations.rar】这个压缩包文件主要涵盖了关于Hibernate框架中注解的使用和理解。Hibernate是一款流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据...

    Hibernate_Annotation参考文档

    ### Hibernate_Annotation参考文档知识点详解 #### 一、概述 本文档主要介绍Hibernate_Annotation的使用方法及其在Java持久化框架中的应用。该文档重点介绍了`javax.persistence`包下的注解,这些注解是实现对象...

    Hibernate_3.2.0_Reference中文版

    - Hibernate通过`@ManyToOne`、`@OneToMany`、`@OneToOne`、`@ManyToMany`等注解实现对象间的关联映射。 - 可以使用懒加载或立即加载策略处理关联对象,以优化性能。 5. **持久化操作** - Session接口提供了增删...

    hibernate_second项目源码

    **hibernate_second项目源码**是一份关于Hibernate框架中一对多双向关联关系实现的实践项目。在这个项目中,开发者将深入理解如何在Java应用程序中使用Hibernate来处理复杂的数据关联和持久化操作。 **一、...

    Spring_Hibernate_JAVAX_Annotation注解

    ### Spring_Hibernate_JAVAX_Annotation 注解详解 #### 一、概述 本文将详细介绍与SSH(Spring+Struts+Hibernate)开发相关的注解。这些注解覆盖了多个领域,如AspectJ、Batch处理、Spring框架本身的功能(包括...

    hibernate_first_new项目源码

    【hibernate_first_new项目源码】是一个关于Hibernate框架学习的项目,主要涵盖了对Hibernate常用接口的详细讲解和实例应用。Hibernate是一个强大的Java持久层框架,它为开发者提供了对象关系映射(ORM)功能,使得...

    hibernate官方API +Hibernate開発指南+hibernate_reference

    《Hibernate官方API》、《Hibernate开发指南》及《hibernate_reference》这三份文档是Hibernate框架学习的重要参考资料。Hibernate是一款强大的Java对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互,...

    Hibernate_3.2.0_官方参考手手册

    《Hibernate_3.2.0_官方参考手手册》是一份详尽的指南,涵盖了Hibernate 3.2.0版本的各个方面。Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以更加专注于业务逻辑...

Global site tag (gtag.js) - Google Analytics