`
ben_hu
  • 浏览: 94010 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Hibernate级联配置

    博客分类:
  • Java
阅读更多
1.级联是指两个对象之间的操作联动关系,对一个对象执行了操作之后,对其指定的级联对象也需要执行相同的操作;
2.级联配置通过many-to-one的cascade属性实现;
3.cascade属性有四种取值:
  all:所有操作都执行级联操作;
  none:所有操作都不执行级联操作;
  save-update:保存和更新时执行级联操作;
  delete:删除时执行级联操作;
4.通过级联操作可以解决持久化对象不能直接引用瞬时对象的问题。

hibernate.cfg.xml:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="connection.username">useName</property>
        <property name="connection.url">url</property>
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
        <property name="myeclipse.connection.profile">...</property>
        <property name="connection.password">pass</property>
        <property name="connection.driver_class">driveclass</property>
        <property name="show_sql">true</property>
        
        <mapping resource="pojo/Group.hbm.xml" />
        <mapping resource="pojo/User.hbm.xml" />       
    </session-factory>
</hibernate-configuration>



Group.java:

package pojo;

public class Group {

    private long id;
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}



User.java:

package pojo;

public class User {

    private long id;
    private String username;
    private String password;
    private Group group;

    public Group getGroup() {
        return group;
    }

    public void setGroup(Group group) {
        this.group = group;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}



Group.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="pojo.Group" table="GROUP" schema="SCOTT">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="20" not-null="true" />
        </property>
    </class>
</hibernate-mapping>




User.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="pojo.User" table="USER" schema="SCOTT">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="native" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="10" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PASSWORD" length="10" not-null="true" />
        </property>
        <many-to-one name="group" column="RELATEDGROUP" cascade="all" />
    </class>
</hibernate-mapping>


HibernateSessionFactory.java:
package factory;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {
   
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private  static Configuration configuration = new Configuration();
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

    static {
        try {
            configuration.configure(configFile);
            sessionFactory = configuration.buildSessionFactory();
        } catch (Exception e) {
            System.err
                    .println("Error Creating SessionFactory");
            e.printStackTrace();
        }
    }
    private HibernateSessionFactory() {
    }
    
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();

        if (session == null || !session.isOpen()) {
            if (sessionFactory == null) {
                rebuildSessionFactory();
            }
         session = (sessionFactory != null) ? sessionFactory.openSession()
                    : null;
            threadLocal.set(session);
        }

        return session;
    }

        public static void rebuildSessionFactory() {
        try {
            configuration.configure(configFile);
            sessionFactory = configuration.buildSessionFactory();
        } catch (Exception e) {
            System.out
                    .println("Error Creating SessionFactory");
            e.printStackTrace();
        }
    }

        public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);

        if (session != null) {
            session.close();
        }
    }
   
    public static org.hibernate.SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void setConfigFile(String configFile) {
        HibernateSessionFactory.configFile = configFile;
        sessionFactory = null;
    }

    public static Configuration getConfiguration() {
        return configuration;
    }

}


ExportToDB.java:
package export;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ExportToDB {
    public static void main(String[] args) {
        Configuration cfg = new Configuration().configure();
        SchemaExport export = new SchemaExport(cfg);
        export.create(true, true);
    }
}




ExportDBAddCascade.java:

package export;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import factory.HibernateSessionFactory;
import pojo.Group;
import pojo.User;

public class ExportDBAddCascade {

    public static void main(String[] args) {
        Session session = HibernateSessionFactory.getSession();
        session.beginTransaction();
        
        Group group = new Group();
        group.setName("J2EE Developer");
        
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setUsername("name" + i);
            user.setPassword("111");
            user.setGroup(group);
            session.save(user);
        }
        
        session.getTransaction().commit();
        
        HibernateSessionFactory.closeSession();
    }

}
分享到:
评论

相关推荐

    hibernate 级联查询

    **标题解析:** “Hibernate 级联查询”是指在使用...以上是对“Hibernate级联查询”这一主题的详细说明,涵盖了相关概念、配置、使用示例以及可能的源码解析。由于没有具体的压缩包内容,无法提供更详细的实例分析。

    Hibernate的级联操作(增,删,该)

    在Hibernate的配置文件中,我们可以通过以下方式设置级联操作: ```xml ,delete-orphan" /&gt; ``` 在这个例子中,父实体的`childEntity`属性将执行全部级联操作,包括添加、删除和更新,同时`delete-orphan`意味着如果...

    Hibernate级联操作一对多demo

    在这个" Hibernate级联操作一对多demo "中,我们将探讨如何在一对多的关系中应用级联操作。 一对多关系是数据库中常见的关系类型,它表示一个实体(如部门)可以有多个相关实体(如员工)。在Hibernate中,这种关系...

    hibernate级联增删改查

    本主题将深入探讨"hibernate级联增删改查",特别是针对"t_card主表"和"t_person从表"的关系。 首先,级联操作在Hibernate中是一种配置,用于指定当主表中的实体发生变化时,是否以及如何更新或删除关联的从表实体。...

    hibernate 级联(cascade和inverse)一对多

    一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...

    hibernate many-to-many级联保存,级联更新,级联删除

    当调用`session.delete(student)`或`session.delete(course)`时,如果配置了级联删除,Hibernate会检查关联表,找出所有与被删除实体关联的记录,并一并删除。请注意,级联删除可能引起数据丢失,因此在使用时需谨慎...

    关于Hibernate级联删除的问题.doc

    在文档中提到的场景下,我们来详细探讨Hibernate级联删除的原理和配置方法。 首先,我们要理解关系映射中的几个关键概念。在给出的例子中,有四个表:A、AA、B和BB,它们之间存在一对多(one-to-many)和一对一...

    Hibernate的缓存级联查询

    二级缓存则基于SessionFactory,能在进程甚至集群间共享数据,但默认是关闭的,需要手动配置。查询缓存基于二级缓存,用于存储预编译的HQL或SQL查询结果,进一步减少数据库访问。 HQL(Hibernate Query Language)...

    Hibernate 一对多、多对一、级联、加载、反转

    而在`Hibernate_01_1`的示例代码中,可能展示了如何在Hibernate中配置和使用这些关系,包括如何定义映射、如何处理级联和加载策略等。 总的来说,理解和熟练运用这些概念对于开发基于Hibernate的Java应用非常重要,...

    hibernate3.2的级联关系_JavaProject

    - 映射文件(.hbm.xml),可能包含了一些级联关系的配置,虽然在Hibernate 3.2之后,推荐使用注解进行配置。 - 测试类(Test.java),用于执行不同的操作(如保存、更新、删除)以展示级联关系的效果。 通过这个...

    常用 Hibernate 映射配置说明.doc

    ### 常用Hibernate映射配置详解 #### 1. hibernate-mapping节点解析 `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库...

    struts+hibernate+ajax级联菜单

    本项目"struts+hibernate+ajax级联菜单"结合了这三者,旨在实现一种交互性更强的前端菜单功能。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它主要用于控制应用程序的流程,处理...

    struts2 hibernate 实现无限级联 树形分类

    在这个"struts2 hibernate 实现无限级联 树形分类"项目中,主要目标是创建一个能够展示无限级联的树形分类结构。这种结构通常用于组织层次化的数据,如产品类别、部门结构或者权限角色等。无限级联意味着这个树可以...

    hibernate映射继承关系(每个类都对应一张表)

    接下来,我们将详细讨论如何在Hibernate配置中实现这种映射: 1. **配置实体类**:首先,你需要为每个类创建一个Java实体类,并使用`@Entity`注解标记它们。对于基类,可以使用`@Inheritance(strategy=...

    hibernate利用配置文件反向生成数据库所有配置文件及方法

    本篇文章将详细讲解如何使用Hibernate通过配置文件反向生成数据库的所有配置文件,以及涉及的相关步骤和技术要点。 首先,Hibernate的反向工程(Reverse Engineering)功能可以帮助开发者从现有的数据库中生成实体...

    Hibernate_范型_级联

    综上所述,这些文件涵盖了Hibernate中范型的应用、级联操作的原理以及不同关联类型的配置和测试。通过学习和实践这些内容,开发者能够更好地掌握Hibernate在实际项目中的使用,提高数据库操作的效率和代码的健壮性。

    hibernate相关配置.rar

    这个“hibernate相关配置.rar”文件很可能包含了关于如何配置和使用Hibernate的各种资源,包括XML配置文件、实体类、映射文件等。接下来,我们将深入探讨Hibernate的核心概念和配置。 1. **什么是Hibernate?** ...

    详解Hibernate cascade级联属性的CascadeType的用法

    详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) ...cascade表示级联操作,在hibernate配置注解@OneToOne,@OneToMany,@ManyToMany,@ManyToOne中的属性。 例如: @ManyToOne(c

    Spring+Hibernate 一对一映射级联增删改查小例子

    本示例将探讨如何在Spring与Hibernate整合的环境中实现一对一(OneToOne)映射,并进行级联操作,包括增、删、改、查。下面我们将详细讲解这一主题。 首先,一对一映射是数据库设计中的一种关系,表示两个表中的一...

    hibernate_3配置文件参数汇总

    - `hibernate.max_fetch_depth`:控制外连接加载(outer join fetch)的深度,限制了级联加载的对象层次。 - `hibernate.default_batch_fetch_size`:设置默认的批量获取大小,优化关联查询的效率。通常建议的值是...

Global site tag (gtag.js) - Google Analytics