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

hibernate--关系映射CRUD

阅读更多

CRUD中主要学习了

1.cascade=(CascadeType.*)
2.fetch=FetchType.*

这两者都是级联操作,就是删除一方时,另一方也相应删除。

前者主要是用于增删查找,常用于save(),update(),delete()等,后者主要是get(),load()操作.

一.Cascade

CascadeType有四种类型ALL,PERSIST,REFRESH,MERGE

CascadeType.ALL最常用的,只要不是读取,都能这么写

1.save(),persist()

save()或者是persist()//由于hibernate要与其他工具相关联,所以用save必须设定为CascadeType.ALL,persist还可以是CascadeType.PERSIST

@Test
public void testSaveGroup(){ 
 User u1 =new User();
 u1.setName("u1");
 User u2 =new User();
 u2.setName("u2");
 Group g =new Group();
 g.setId(1);
 g.setName("g1");
 g.getUsers().add(u1);//设定group和user的关系,即g对象到u1,1对多的关系
 g.getUsers().add(u2);
 u1.setGroup(g);//把g_id的值写入user中
 u2.setGroup(g);
 Session s = sf.getCurrentSession();
 s.beginTransaction();
 s.persist(g);    //不用cascade的话, s.persist(g);     s.persist(u);    也可以
// s.save(u);
 s.getTransaction().commit();
 }

2.update()或merge(),与之前类似,CascadeType.MERGE

常用的文档说明里面的update()应该是脱机态,到持久态。

@Test
public void testUpdate2User(){ 
 testSaveGroup();
 
 Session s = sf.getCurrentSession();
 s.beginTransaction();
 User u = (User)s.get(User.class, 1);
 s.getTransaction().commit();
 u.getGroup().setName("aaaa");  //这里其实是给Group 中的group.name设置值,所以结果自然在表中
 u.setName("qqqq");
 
 Session s1 = sf.getCurrentSession();
 s1.beginTransaction();
 s1.update(u);
 s1.getTransaction().commit();
}

另一种

@Test
public void testUpdate1User(){ 
 testSaveGroup();
 
 Session s = sf.getCurrentSession();
 s.beginTransaction();
 User u = (User)s.get(User.class, 1);
 
 u.getGroup().setName("qwe");  
 u.setName("asd");
 
 s.getTransaction().commit();
}

3.delete()

直接级联删除很容易,但是,只是部分删除,比较复杂,常用hql语句来写


 for(User u : g.getUsers())//是因为g.getUsers是数组,必须这么写,相当于遍历了与g这个实例下的相关user表中的ID

{
 u.setGroup(null);   //给user中的g_id设为 null值,group中不能设为CascadeType.ALL


 }
 s.delete(g);

 s.getTransaction().commit();
}

两者等价,后者用到HQL语句

 for(User u : g.getUsers()){
 s.createQuery("update User u set u.group=null where u.group="+g.getId()).executeUpdate();
 }
 s.createQuery("delete from Group g where g.id="+g.getId()).executeUpdate(); from的是类和对象,这点关键
s.getTransaction().commit();


g.getUsers().setName()  //给User类中的某个对象设置值

二.FetchType有两种类型

lazy,eager

其作用主要是,级联取东西

many-to-one默认是eager//就是马上取

one-to-many默认是lazy//不取,除非是用到了才弄

一般不同时设eager,用默认,或者是两个都是lazy

get()和load的区别如前所述

@Test
public void testLoadGroup(){ 
 testSaveGroup();
 
 Session s = sf.getCurrentSession();
 s.beginTransaction();
 Group g= (Group)s.load(Group.class, 1);

 for (User u : g.getUsers()) {  
  System.out.println(u.getName());
 }
 s.getTransaction().commit(); 
}

分享到:
评论

相关推荐

    hibernate-release-5.2.10

    Hibernate是Java平台上的一款开源对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作。在SSH(Spring、Struts、Hibernate)框架中,Hibernate作为持久层的解决方案,极大地简化了数据库操作的...

    hibernate-release-4.3.10.Final.zip

    Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,自诞生以来就深受开发者喜爱。本次我们聚焦于`hibernate-release-4.3.10.Final`版本,这是一个稳定且功能丰富的版本,为开发者提供了强大的数据持久化...

    hibernate-core-5.0.11.Final.jar

    Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将重点探讨`hibernate-core-5.0.11.Final.jar`的核心源码,帮助读者深入...

    hibernate-cglib-repack-2.1_3.jar.zip

    在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而CGLIB则是一个代码生成库,它允许开发者在运行时动态创建子类,对Java类进行扩展。本文将详细探讨Hibernate-CGLIB的...

    hibernate-release-4.3.1.Final.zip

    Hibernate是Java开发中广泛使用的对象关系映射(ORM)工具,它允许开发者用面向对象的方式来操作数据库,从而简化了数据持久化的复杂性。这个版本可能是Hibernate的稳定版本,标记为"Final"意味着它经过充分测试,...

    最新 hibernate-release-4.2.13.Final.tgz

    Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够用面向对象的方式来处理数据。本资源包“hibernate-release-4.2.13.Final.tgz”提供了一个完整的Hibernate ...

    Middlegen-Hibernate-r5

    Middlegen是一款基于Ant的任务,能够从数据库模式生成Hibernate的元数据XML文件,这些文件包含了关于表结构、字段和关系的信息,用于驱动Hibernate自动创建Java对象和数据库表之间的映射。通过Middlegen,开发者可以...

    hibernate-annotations-3.4.0.GA

    Hibernate是Java领域中广泛应用的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。而Hibernate Annotations是Hibernate框架的一个重要组成部分,它引入了基于注解...

    hibernate-release-4.2.4.Final.zip

    Hibernate是一个开源的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以通过面向对象的方式来处理数据。通过此压缩包,用户可以获取到所需的所有JAR文件以及可能的Eclipse插件,以便捷地在开发环境中...

    hibernate-release-5.0.7.Final.zip

    讲师深入讲解了如何使用5.0.7.Final版本进行实际项目开发,包括实体类设计、配置文件设置、CRUD操作、关联映射、查询优化等关键知识点,旨在帮助学员快速掌握Hibernate的精髓。 5. 学习资源 包含的"0.txt"可能是一...

    hibernate-distribution-3.6.2 API及jar包

    Hibernate,作为一个强大的对象关系映射(ORM)框架,是Java开发中的重要工具。本资源集合包含`hibernate-distribution-3.6.2`版本的API中文文档以及相关的jar包,旨在帮助开发者更好地理解和使用Hibernate框架。 ...

    hibernate-distribution-3.3.2.GA-dist

    Hibernate,作为一个开源的对象关系映射(ORM)框架,极大地简化了Java开发者在数据库操作中的工作。本篇文章将聚焦于Hibernate 3.3.2.GA版本,探讨其核心特性、功能以及在实际项目中的应用。 首先,"hibernate-...

    hibernate-annotations 相关jar包

    在Hibernate中,Hibernate Annotations是一个重要的组成部分,它引入了JPA(Java Persistence API)的注解,使得对象-关系映射更加简洁且无需XML配置。 **一、Hibernate Annotations简介** Hibernate Annotations是...

    Spring-MVC-Hibernate-CRUD-源码.rar

    Hibernate则是一个强大的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。 1. **Spring MVC框架**:Spring MVC提供了一个灵活的MVC架构,允许开发者将业务逻辑、视图和控制分离。核心组件包括...

    hibernate-3.3.2.GA-jar包集合

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的编程语言(如Java)来处理数据库操作,极大地简化了数据库应用程序的开发。在这个“hibernate-3.3.2.GA-jar包集合”中,我们聚焦的是...

    hibernate-annotation3.4.0 + hibernate-distribution3.3.2 + slf4j-1.5.8.rar

    该版本支持JPA(Java Persistence API),提供了对象-关系映射(ORM)的能力,使得开发者可以使用面向对象的方式处理数据库事务,而无需编写大量SQL语句。3.3.2版本相对于更早期的版本,增加了对Java 5和6的支持,...

    hibernate-orm-3.3源码

    Hibernate,作为一个强大的对象关系映射(ORM)框架,一直以来都是Java开发者的重要工具。其3.3版本是 Hibernate 的一个重要里程碑,为开发者提供了丰富的功能和优化的性能。本文将针对《hibernate-orm-3.3源码》...

    hibernate-release-4.2.2.Final

    Hibernate,作为一个开源的对象关系映射(ORM)框架,是Java开发中的重要工具,它极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将深入探讨Hibernate 4.2.2.Final版本的特性、整合框架的...

    Hibernate-CRUD自用基础模板

    Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库之间的交互。在Java开发中,CRUD(Create, Read, Update, Delete)是数据库操作的基础,而Hibernate通过提供便捷的API,使得...

    hibernate-demo02-crud.zip

    Hibernate是一个强大的对象关系映射(ORM)工具,它简化了Java应用程序与数据库之间的交互。在本示例中,我们将深入探讨Hibernate如何实现对数据库的基本操作。 1. **Hibernate简介** Hibernate是一个开源的ORM...

Global site tag (gtag.js) - Google Analytics