java Hibernate延迟加载_java

示例数据表:team(班级)、certificate(身份证)、student(学生)

Team.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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="edu.dgut.ke.model.Team" table="TEAM" lazy ="true" ><!-- 多对一的延迟加载设置 -->
        <id name="id" type="java.lang.String">
            <column name="ID" length="32" />
            <generator class="uuid.hex" />
        </id>
        <property name="teamname" type="java.lang.String">
            <column name="TEAMNAME" length="32" not-null="true" unique="true" />
        </property>
        <set name="students" inverse="true" cascade="all" lazy="true" > <!-- 一对多的延迟加载设置 -->
            <key>
                <column name="TEAMID" length="32" not-null="true" />
            </key>
            <one-to-many class="edu.dgut.ke.model.Student" />
        </set>
    </class>
</hibernate-mapping>

Certificate.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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="edu.dgut.ke.model.Certificate" table="CERTIFICATE" lazy="true" ><!-- 一对一的延迟加载设置 -->

        <id name="id" type="java.lang.String">
            <column name="ID" length="32" />
            <generator class="uuid">

            </generator>
        </id>
        <property name="describe" type="java.lang.String">
            <column name="`DESCRIBE`" length="50" not-null="true" />
        </property>
        <one-to-one name="student"
        class="edu.dgut.ke.model.Student"
         constrained="true" ><!-- 一对一的延迟加载设置 -->

        </one-to-one>
    </class>
</hibernate-mapping>

Student.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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="edu.dgut.ke.model.Student" table="STUDENT" lazy="true" >
        <id name="id" type="java.lang.String">
            <column name="ID" length="32" />
            <generator class="uuid.hex" />
        </id>
        <many-to-one name="certificate"
        class="edu.dgut.ke.model.Certificate"
        unique="true"
        column="cardId"
        cascade="all"
        >
        </many-to-one>
        <many-to-one name="team" class="edu.dgut.ke.model.Team">
            <column name="TEAMID" length="32" not-null="true" />
        </many-to-one>
        <property name="studentname" type="java.lang.String">
            <column name="STUDENTNAME" length="16" not-null="true" unique="true" />
        </property>
    </class>
</hibernate-mapping>
注意:对one-to-one 关系进行延迟加载和其他关系相比稍微有些不同。many-to-one 的延迟加载是在配置文件的class 标签
上设置 lazy="true" ,one-to-many 和 many-to-many 的延迟加载是在 set 标签中设置lazy="true"。而one-to-one 不只要在 classs
标签设置 lazy="true",而且要在one-to-one 标签中设置constrained="true" 。
如果不设置constrained="true",则一对一查询使用默认的预先抓取策略(fetch="join")。

时间: 2024-10-03 23:42:12

java Hibernate延迟加载_java的相关文章

java面试常见问题之Hibernate总结_java

主要从以下十几个方面对Hibernate做总结,包括Hibernate的检索方式,Hibernate中对象的状态,Hibernate的3种检索策略是什么,分别适用于哪种场合,ORM解决的不匹配问题, Hibernate映射继承关系的3种方式,Session的find()方法以及Query接口的区别等方面问题的总结,具体内容如下: 1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象.) Ø  OID检索(按照对象的OID来检索对象.) Ø  HQL检索(使

Hibernate延迟加载技术详解_java

本文实例讲述了Hibernate延迟加载技术.分享给大家供大家参考,具体如下: Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载.Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能. 下面先来剖析 Hibernate 延迟加载的"秘密". 集合属性的延迟加载 当 Hibernate 从数据库中初始化某个持久化实体时,该实体的集合属性是否随持久化类一起初始化呢?如果集合属性

Hibernate延迟加载原理与实现方法_java

本文实例讲述了Hibernate延迟加载原理与实现方法.分享给大家供大家参考,具体如下: 为了进一步优化Hibernate的性能,可以使用: 延迟加载技术.管理数据抓取策略.进行缓存管理 等方面考虑来提高Hibernate的性能. 1. 延迟加载(load) 延迟加载(load)是Hibernate为提高程序执行效率而提供的一种机制,即只有真正使用该对象的数据时才会创建. 延迟加载的过程:通过代理(Proxy)机制来实现延迟加载.Hibernate从数据库获取某一个对象数据时.获取某一个对象的集

Java Hibernate对象(瞬时态,持久态,脱管态)详解_java

Java Hibernate对象            由于最近学习Java Hibernate,这里对Java Hibernate对象的几种状态进行了资料整理,  有兴趣的朋友可以看下. 瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象. 持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交: 持久对象状态发生改变,在事务提交时

java Hibernate框架Session的保存、更新、删除和查询教程

session的save方法 使一个临时对象变为持久化对象.session的save方法完成以下操作:1.把customer对象加入到缓存中,使他变为持久化对象2.选用映射文件指定的标识符生成器为持久化对象分配唯一的OID.Customer.hbm.xml文件中id元素的子元素指定标识符生成器: <generator><id name="id" column="ID" >    <generator class="increm

关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放

问题描述 关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放 关于Java Hibernate 插入与更新同一张MySQL表不同字段,出现锁没被释放,这个有可能是数据还没插入完或者插完了锁没有被释放,导致下一个更新操作不能执行,等待超时,这个情况出现在操作数据量大的时候!这个情况有哪几种解决方式? [http-bio-8080-exec-3] [SQLErrorCodesFactory.:126] SQLErrorCodes loaded: [DB2 Derb

java hibernate运行起动报错

问题描述 java hibernate运行起动报错 严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sess

proxool hibernate-Proxool+java+hibernate

问题描述 Proxool+java+hibernate java应用程序,使用Proxool连接池和hibernate,怎么把Proxool.xml放到指定的地方,比如项目下的conf目录,而不是一定要放在src源路劲下

对象被json格式化时,hibernate 延迟加载将所有对象都查了出来。

问题描述 对象被json格式化时,hibernate 延迟加载将所有对象都查了出来. 对象被json格式化时,hibernate 延迟加载将所有对象都查了出来, 如何在json格式化时不适用get方式? 解决方案 在线等不知道有啥好的方法 解决方案二: jackson json,用于hibernate的懒加载对象级联关系的json解析 解决方案三: 你好! 如何这样的话如果我用到了延迟加载呢?有没有更好的办法?