`
persistC
  • 浏览: 73127 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hibernate 四

阅读更多
一、 many-to-one关系在数据库中如何体现,在JavaBean中如何体现,在
Hibernate中如何映射many-to-one关系。
1、 数据库中:一个表的主健对应另一个表的外健。
2、 javaBean中:一个对象包含另一个对象的一个引用,另一个对象包含这个对象的一组(集合,用set)引用。
3、 在hibernate中:用set.key指定具体列。
我们以订单Order(一方)和订单项Item(多方)为例:

a、Order.hbm.xml的写法:
<class name="Order" table="ec_order">
    <id name="id" column="id" type="integer">
      <generator class="native" />
    </id>
    <property name="owner" column="owner" type="string" />
    <property name="phone" column="phone" type="string" />
    <property name="address" column="address" type="string" />
    <set  name="items" cascade="all-delete-orphan" inverse="true">
      <key column="orderid" />
      <one-to-many class="Item" />
    </set>
  </class>
注:inverse=“true”表示忽略集合一端的变化。
cascade="all-delete-orphan":这个比较麻烦一点,我们先来看看把cascade设为all的情况:在我们调用session.delete(order)时,会删除order下所有的item,但是如果调用order.getItems().remove(item),然后调用session.update(order)则不会删除此item,只会把 ec_item表中该条item记录的order_id设置为null。因此,如果想通过order.getItems.remove(item)删除对象,需要在已有级联的基础上加上“delete-orphan”。


b、Item.hbm.xml的写法
<class name="Item" table="ec_item">
    <id name="id" column="id" type="integer">
      <generator class="native" />
    </id>
    <property name="product" column="product" type="string" />
    <property name="amount" column="amount" type="integer" />
    <many-to-one name="order" class="Order" column="orderid"/>
  </class>


inverse="true"就是在设置如果在内存中的修改或添加了这个集合中的某一个或某几个对象他不会将全部集合的信息同步到数据库,
而是只将集合中被修改的对象重新同步到数据库。

cascade属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时会进行级联操作,
cascade="none",cascade="save-update",cascade="delete",cascade="all" cascade="persist"
cascade="delete-orphan",cascade属性的值常用的设置为以上五项:

none就是不使用级联操作,默认级联是none。

save-update也就是只有对象保存操作(持久化操作)或者是持久化对象的更新操作,才会级联操作关联对象(子对象)。

persist就只是将级联对象也持久化到数据库。

delete对持久化对象的删除操作时会进行级联操作关联对象(子对象)。

all对持久化对象的所有操作都会级联操作关联对象(子对象)。

all-delete-orphan,在多端进行删除操作时,会再多端表中留下null空纪录,设置了级联操作为delete之会将表中表示关联的外键id置成null,
不会将这条纪录也删除掉,而把级联设置成delete-orphan就不会留有空纪录,而是级联的把相关纪录删除掉。

batch-size这个属性只能够写在set标签中,这个属性带表批量加载,也就是在加载一端的集合属性时会一次加载指定的数量的对象,
而不是默认的一个一个的加载,会提高效率,批量加载只能用于延迟加载和立即加载策略,也就是(lazy="true"或者lazy="false")。

lazy="true" 延迟加载,所谓的延迟加载,就是对一端的集合属性的加载策略,就是在不使用到集合中的对象的数据就不会真正的加载集合
中的对象数据,而是家在一个代理对象就相当于的一个空的容器。这也就是会出现LazyInitializationException异常,也就是没有初始化
这个代理的集合对象,在事先查询到了集合中的对象就会初始化这个对象,如果Session没有关闭就会在查询加载集合中的对象信息,如果
提前关闭了Session,当使用集合中的对象信息时就会有这个异常。

fetch="join",这就是使用了预先抓取策略,也就是针对关联的对象的加载策略,在使用到关联对象的信息时会再发送sql语句,如果不使
用fetch="join",就会不使用表连接而是先查出一端的关联id再一条一条的发送sql语句查询到关联对象信息,使用了fetch="join"就会使
用表连接将关联对象信息直接查寻出来的。fetch="lazy"这个是默认的设置。

注意:
在使用fetch="join"要区分开他和外连接的区别,他不会忽略配置文件中的加载策略,而使用了外连接就会忽略配置文件中使用了外连接的
一端的所有加载策略,而替之为立即加载。

例:班级 tream,身份证 Certigicate 学生 student
身份证和学生是一对一关系,班级和学生是一对多的关系。学生对身份证的加载策略是预先抓取,学生对班级是预先抓取,但是班级对学生
是延迟加载。

现在使用了外连接
Query q=session.createQuery("from Student as s left join s.team");
as 的语法是取别名的语法。
也就是使用了外连接的来查寻班级,这样就会忽略,学生对象对其所有属性除了使用外连接查寻的属性,而其余都会使用立即加载。

<property name="" column="" type="" not-null="true">,这样也就会使这个属性不能够为空值

查询对象,可以使用get()和load()方法,不过前提是必须知道该对象持久化时的唯一标识,也就是id,和这个对象的类对象。
分享到:
评论

相关推荐

    最新版本的Struts2+Spring4+Hibernate4框架整合

    同时使用了Struts2、Spring4、Hibernate4、log4j、slf4j、junit4、ehcache等库或框架,搭建一个最基本的项目原型。 三、 三大框架最新版本下载:截止2014-10-01 Struts2.3.6:发布于2014-05-03,目前的最新版本。...

    Spring4+SpringMVC4+Hibernate4整合源码

    Spring4、SpringMVC4和Hibernate4是Java开发中非常重要的三个框架,它们分别负责不同的职责,共同构建了一个强大的企业级应用开发环境。Spring4作为核心框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,极...

    Hibernate4的一些总结

    9. **实体状态与生命周期**:阐述Hibernate4中实体的四种状态(瞬时态、持久态、托管态和游离态)及其转换。 10. **性能优化**:提供一些优化Hibernate4性能的建议,如批处理、预加载、二级缓存的合理使用等。 ...

    spring4+springmvc4+hibernate4 整合

    Spring 4是其第四个主要版本,增强了对Java 8的支持,提供了更好的性能和更小的内存占用。它包括多个模块,如Core Container、Data Access/Integration、Web等,可以用来处理不同层面的开发需求。 **SpringMVC 4** ...

    Hibernate 4jar包

    Hibernate 4 是一款开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在Java开发中,Hibernate 提供了一个强大的工具,将业务对象与数据库表进行映射,允许开发者使用面向对象的方式...

    hibernate4

    例如,在描述中提到了四张表:department、permission、userinfo、user_perm,这些表可以通过 Hibernate 的反向工程生成对应的 Java 类。 - 通过 Hibernate Reverse Engineering 向导,可以选择数据库中的表,并...

    Hibernate4 必备包

    **Hibernate4 必备包详解** Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。在Java开发中,Hibernate4 是一个重要的里程碑,引入了许多新特性和改进,旨在提高性能...

    spring4+hibernate4整合例子

    Spring4和Hibernate4是Java开发中的两大核心框架,它们分别负责应用的依赖管理和持久化数据。这个整合例子展示了如何在Eclipse环境中将这两个框架结合在一起,实现一个完整的数据访问层。接下来,我们将深入探讨...

    SSH - SpringMVC4 + Spring4 + Hibernate4 + c3p0 + Mysql.zip

    Spring4是Spring框架的第四个主要版本,提供依赖注入、AOP(面向切面编程)、数据访问、Web支持、任务调度等多种功能。在这个项目中,Spring4不仅用于管理Bean的生命周期,还通过Spring的DAO支持和事务管理来协调...

    hibernate4 全部jar包

    Hibernate 4 是一个流行的Java持久化框架,用于简化数据库交互,尤其在企业级应用程序中广泛使用。SSH(Struts、Spring、Hibernate)是Java Web开发中的经典三层架构,其中Hibernate负责对象关系映射(ORM)。这个...

    hibernate4所有相关jar包

    hibernate4最新的所有相关jar包

    hibernate4全套jar

    Hibernate 4 是一款广泛应用的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现对数据库的操作。这个"hibernate4全套jar"压缩包包含了Hibernate 4框架运行所需的...

    hibernate4必备jar包

    Hibernate 4 是一个流行的Java持久化框架,用于简化数据库操作,它通过对象关系映射(ORM)技术将数据库中的数据与Java对象关联起来。在开发使用Hibernate 4 的项目时,确保正确配置并包含所有必需的JAR包是至关重要...

    hibernate4.x jar

    Hibernate 4.x 是一个流行的Java持久化框架,用于简化数据库操作和对象关系映射(ORM)。这个"hibernate4.x jar"包包含了 Hibernate 框架的核心组件和其他相关库,便于开发者在自己的项目中使用。它使得开发人员能够...

    hibernate4 jar包

    标题 "hibernate4 jar包" 提供了一个关键信息,即这个压缩包包含了 Hibernate 4 框架的相关库文件。Hibernate 是一个流行的 Java 应用程序开发框架,专门用于对象关系映射(ORM),它使得数据库操作变得更加简单,...

    hibernate4全部架包

    13. **实体状态**: Hibernate区分了四种实体状态:瞬时态、持久态、游离态和脱管态,理解这些状态对于正确管理对象和事务至关重要。 这个"hibernate4全部架包"中的文件,如`__rzi_0.030`、`__rzi_0.398`、`__rzi_0....

    spring-orm-hibernate4源码

    《深入解析Spring ORM Hibernate4源码》 Spring ORM框架与Hibernate4的集成是Java开发中的常见实践,这个源码库提供了直接导入Eclipse工程的便利,让我们有机会深入了解这两个强大工具的内部工作机制。本文将围绕...

    Hibernate4 jar包及配置文件

    【Hibernate4 jar包及配置文件】是Java开发中用于实现对象关系映射(ORM)的重要工具,它简化了数据库操作,使开发者可以使用面向对象的方式来处理数据库事务。在这个压缩包中,我们通常会找到一系列的Hibernate核心...

    hibernate4+mysql测试相关jar包

    本资源“hibernate4+mysql测试相关jar包”是针对使用Hibernate 4版本进行MySQL数据库操作的开发者准备的,包含了进行基本的增、删、查、改(CRUD)操作所需的库文件。 首先,让我们深入了解一下Hibernate 4。...

    Hibernate四大属性

    4. `hibernate.c3p0.min_size`: 如果使用C3P0作为连接池,这个属性设定了连接池的最小连接数。C3P0是常用的数据库连接池实现,它可以管理数据库连接的生命周期,提供并发访问的高效性。`min_size`值决定了当连接池...

Global site tag (gtag.js) - Google Analytics