`
yugouai
  • 浏览: 492357 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate级联配置

阅读更多


关键字: 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 级联(cascade和inverse)一对多

    hibernate 级联(cascade和inverse)一对多,Jar包,数据库建表语句都好了,只要修改一下,数据库配置文件,就可以使用了,使用junit进行测试。

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

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

    Hibernate3.1_学习源码

    01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有session的关闭后重建问题。 02 02Hibernate_UseMyEclipse: 利用...

    hibernate之一对多配置demo

    详细讲解了hibernate 的多对一xml配置以及curd操作,讲解了级联操作,适合初学者学习

    hibernate 体系结构与配置 参考文档(html)

    Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5...

    城市级联之三级联动

    该项目为一个整合hibernate与struts,利用json对象存放临时数据库数据,连接数据的三级...Struts.xml:主要亮点在配置一个多变级联时防止加载多个表的操作,从而达到解决多表级联操作的时候经常出现的session已关闭的bug

    Hibernate+中文文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射文件  3.4.1 映射文件的文档类型定义(DTD)  3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过...

    hibernate3.2中文文档(chm格式)

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    hibernate注解

    hibernate注解 1.级联关系 2.增删改查 3.二级缓存 4.日志配置 5.注解解析

    HibernateAPI中文版.chm

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    3.1 创建Hibernate的配置文件 47 3.2 创建持久化类 48 3.3 创建数据库Schema 51 3.4 创建对象-关系映射文件 52 3.4.1 映射文件的文档类型定义(DTD) 52 3.4.2 把Customer持久化类映射到CUSTOMERS表 54 3.5 ...

    Hibernate实战(第2版 中文高清版)

     2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2 启动Java Persistence项目   2.2.1 使用Hibernate Annotations   2.2.2 使用Hibernate EntityManager   2.2.3 引入EJB组件   2.2.4 切换...

    最全Hibernate 参考文档

    1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. 架构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 3. 配置 3.1. 可编程的配置方式 ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    hibernate 教程

    开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...

    Hibernate中文详细学习文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    Hibernate 中文 html 帮助文档

    1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 ...

    Hibernate注解

    很奇怪),分别是CascadeType.PERSIST(级联新建),CascadeType.REMOVE(级联删除),CascadeType.REFRESH(级联刷新),CascadeType.MERGE(级联更新),CascadeType.ALL(全部四项) * 方法一 * 主表: ?@OneToOne...

Global site tag (gtag.js) - Google Analytics