`

hibernate的级联操作

阅读更多
转载:http://yugouai.iteye.com/blog/974170

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

hibernate.cfg.xml:

Java代码 
<?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:

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:

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:

Java代码 
<?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:

Java代码 
<?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:
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:
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:

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级联操作一对多demo

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

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

    在Hibernate中,级联操作(Cascading Operations)是一种高级特性,它使得对象之间的关联关系在数据库层面得以同步更新。当我们对一个实体对象进行操作时,可以设置级联属性,让这些操作自动传播到与之相关联的其他...

    Hibernate级联操作.docx

    在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...

    hibernate 级联查询

    Hibernate提供了级联操作来简化数据的保存、更新和删除等操作,使得开发者无需手动编写复杂的SQL语句,就能实现关联对象的联动处理。 **描述分析:** 虽然描述部分为空,但根据给定的博文链接,我们可以推测文章...

    hibernate级联增删改查

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

    hibernate 级联(cascade和inverse)一对多

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

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

    在Hibernate中,级联操作可以通过`cascade`属性进行配置。主要有以下几种级联类型: 1. `save-update`:当保存或更新父实体时,会自动保存或更新所有关联的子实体。 2. `merge`:在调用`session.merge()`时,不仅...

    Hibernate_级联关系说明_-_关于cascade和inverse的用法

    在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...

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

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

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

    例如,如果在`User`和`Order`的关系中,我们希望由`User`来控制级联操作,可以将`@OneToMany`的`mappedBy`属性设在`User`上,然后设置`inverse`属性为`true`,使得`User`成为关系的主控方,这样在处理`User`时,级联...

    Hibernate的缓存级联查询

    在IT领域,尤其是在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者用面向对象的方式操作数据库。尽管随着Spring Data JPA等现代技术的崛起,Hibernate的使用频率有所下降,但其核心...

    hibernate基础 二 关联映射 级联操作

    ### Hibernate基础之关联映射与级联操作 #### 第一部分:主键生成策略与对象状态管理 ##### 主键生成策略 在使用Hibernate框架时,合理的主键生成策略能够极大地简化开发工作并提升应用性能。Hibernate提供了多种...

    用hibernate做的省市县三级级联,

    总的来说,这个项目展示了如何使用Hibernate、Ajax和DWR来实现一个高效、用户友好的省市县三级级联选择功能。开发过程中涉及了ORM、MVC架构、数据库操作以及前端交互等多个方面,是学习和实践Web开发技能的好实例。

    java开始面试的第27天.doc

    1. Hibernate 级联操作与 `cascade` 属性: Hibernate 提供了级联操作功能,使得对一个实体的保存、更新、删除等操作可以自动影响与其关联的其他实体。在 Hibernate 中,`cascade` 属性用于指定这种级联行为。题目...

    hibernate笔记--云图智联

    ###Hibernate级联操作 级联操作包括级联添加、修改、删除和查看。在一对多或多对多关系中,配置级联类型可以控制当操作一个对象时,其关联对象的反应。例如,在一对多关系中,配置级联添加后,添加父对象时会自动为...

    Hibernate cascade (级联).doc

    ### Hibernate级联(Cascade)详解 #### 一、概述 Hibernate 是一款强大的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象模型映射到数据库表,从而极大地简化了数据访问层的开发工作。在 Hibernate 中,...

    用Struts2+Spring+Hibernate三大框架完成的级联操作

    在级联操作中,Hibernate可能被用来处理省市县和年月日的数据存取,通过HQL(Hibernate Query Language)或者Criteria API来执行SQL查询,获取级联选择的数据。 级联操作的核心在于数据间的关联,例如选择一个省后...

    JSON--List集合转换成JSON对象详解

    文中提到,直接使用fromObject(list)方法在Hibernate级联操作关联的对象上会报错,如果需要保留级联操作,就必须去掉映射文件中的级联配置。这是因为在进行JSON序列化时,Hibernate的关联关系可能会导致异常。 4. ...

    hibernate3.2的级联关系_JavaProject

    在Hibernate中,可以通过`@OneToMany`注解来定义这种关系,并通过`cascade`属性设置级联操作,例如`CascadeType.ALL`表示所有操作都将级联。 2. **一对一(OneToOne)**:这种关系意味着两个实体之间存在一对一的...

Global site tag (gtag.js) - Google Analytics