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_OneToManyC#例子...A0622_EF_OneToManyC#例子代码 A0622_EF_OneToManyC#例子代码 A0622_EF_OneToManyC#例子代码 A0622_EF_OneToManyC#例子代码 A0622_EF_OneToManyC#例子代码 A0622_EF_OneToMany
"JPA_OneToMany"是JPA中的一个关键概念,涉及实体之间的关联关系,特别是在处理一对多关系时。本教程将深入探讨JPA中的OneToMany映射关系,以及如何在实际开发中有效地应用。 1. **OneToMany关系**:在关系数据库中...
【hibernate_second2项目源码】是一个基于Hibernate框架的示例项目,它在前一个项目的基础上进行了扩展,特别引入了级联保存的功能。在这个项目中,我们将深入探讨Hibernate的级联操作,以及如何实现数据的级联保存...
《Hibernate 3.2.0 参考指南中文版》是Java开发人员深入理解Hibernate ORM框架的重要参考资料。Hibernate是一款开源的对象关系映射(ORM)工具,它为Java开发者提供了便捷的方式来管理数据库操作,使得开发者无需...
尽管这个文件名“Hibernate_onetomany_Oracle实例 12.27”看起来像是一个关于一对多关系的示例,而不是一对一,我们可以假设它可能是错误的,或者包含了一个包含一对一和一对多关系的综合示例。通常,一对一关系是指...
《Hibernate Annotations 中文帮助文档》提供了关于如何在Java应用程序中使用Hibernate ORM框架进行数据库映射的详细指南。Hibernate Annotations是Hibernate框架的一部分,它允许开发者使用Java注解来定义对象关系...
10. **关联映射**:Hibernate支持一对一、一对多、多对一、多对多等各种关联关系的映射,如@OneToOne、@OneToMany、@ManyToOne、@ManyToMany等注解。 综上所述,Hibernate 4.1.6.Final API为Java开发者提供了强大而...
《Hibernate框架核心库3.5版本详解》 Hibernate,作为Java世界中一款极其重要的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者能够以面向对象的方式来处理数据库事务。本文将深入探讨在Hibernate ...
【标题】"Hibernate之第2解之-hibernate_demo_1_annotation"主要涵盖了使用Hibernate框架进行对象关系映射(ORM)的实践,特别是基于注解的方式。在这个教程中,我们将深入探讨如何利用Java注解来配置Hibernate实体...
【标题】"48882037Hibernate_API_Chinese" 指的是一部关于Hibernate中文API的资源,这通常是一份详细解释Hibernate框架各种功能和方法的文档,旨在帮助中文用户更好地理解和使用Hibernate。Hibernate是一个开源的...
《深入理解Hibernate:第三解——Many-to-One关系映射实战》 在Java世界里,ORM(Object-Relational Mapping)框架的出现极大地简化了数据库与Java对象之间的交互,而Hibernate作为其中的佼佼者,更是备受开发者青睐...
【hibernate_annotations.rar】这个压缩包文件主要涵盖了关于Hibernate框架中注解的使用和理解。Hibernate是一款流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据...
### Hibernate_Annotation参考文档知识点详解 #### 一、概述 本文档主要介绍Hibernate_Annotation的使用方法及其在Java持久化框架中的应用。该文档重点介绍了`javax.persistence`包下的注解,这些注解是实现对象...
- Hibernate通过`@ManyToOne`、`@OneToMany`、`@OneToOne`、`@ManyToMany`等注解实现对象间的关联映射。 - 可以使用懒加载或立即加载策略处理关联对象,以优化性能。 5. **持久化操作** - Session接口提供了增删...
**hibernate_second项目源码**是一份关于Hibernate框架中一对多双向关联关系实现的实践项目。在这个项目中,开发者将深入理解如何在Java应用程序中使用Hibernate来处理复杂的数据关联和持久化操作。 **一、...
### Spring_Hibernate_JAVAX_Annotation 注解详解 #### 一、概述 本文将详细介绍与SSH(Spring+Struts+Hibernate)开发相关的注解。这些注解覆盖了多个领域,如AspectJ、Batch处理、Spring框架本身的功能(包括...
【hibernate_first_new项目源码】是一个关于Hibernate框架学习的项目,主要涵盖了对Hibernate常用接口的详细讲解和实例应用。Hibernate是一个强大的Java持久层框架,它为开发者提供了对象关系映射(ORM)功能,使得...
《Hibernate官方API》、《Hibernate开发指南》及《hibernate_reference》这三份文档是Hibernate框架学习的重要参考资料。Hibernate是一款强大的Java对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互,...
《Hibernate_3.2.0_官方参考手手册》是一份详尽的指南,涵盖了Hibernate 3.2.0版本的各个方面。Hibernate是一款强大的Java对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以更加专注于业务逻辑...