`
QmoreCzs
  • 浏览: 9331 次
社区版块
存档分类
最新评论

学习笔记8——关联关系CURD之save方法

 
阅读更多
假设两个对象User和Group,在数据库模型上Group为主表,User为从表,属于一对多的关系。
hibernate进行save操作时候,如何进行联级操作。
普通的做法:在session事务中先进行主表的save操作,使对象转化为persisent状态,再进行从表User的save操作。
@Test
	public void testSaveUser(){
		User u = new User();
		u.setName("CZS") ;
		Group g = new Group();
		g.setName("g1") ;
		//g.setId(1) ;
		u.setGroup(g) ;
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		session.save(g) ;
		session.save(u) ;
		session.getTransaction().commit() ;
	}


那么当我们想,已经在表之中确定好两个表之间的关系,如何在hibernate进行子表操作的时候同时自动操作主表对象,让hibernate自动进行联级操作?
可以在对象模型的@ManyToOne中设定属性cascade[]:
@ManyToOne(cascade={CascadeType.ALL})
@ManyToOne(cascade={CascadeType.ALL})
	@JoinColumn(name="t_groupid")
	public Group getGroup() {
		return group;
	}
	public void setGroup(Group group) {
		this.group = group;
	}
	

进行Save:
	@Test
	public void testSaveUser(){
		User u = new User();
		u.setName("CZS") ;
		Group g = new Group();
		g.setName("g2") ;
		//g.setId(1) ;
		u.setGroup(g) ;
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		//session.save(g) ;
		session.save(u) ;
		session.getTransaction().commit() ;
	}







同理存储主表级联子表操作在主表对象加入@OneToMany(cascade={CascadeType.ALL}):
@OneToMany(mappedBy="group",cascade={CascadeType.ALL})
	public Set<User> getUsers() {
		return users;
	}
	public void setUsers(Set<User> users) {
		this.users = users;
	}


session操作则比较麻烦,需要相互设置两个对象模型之间的关系:
         @Test
	public void testSaveGroup(){
		User u1 = new User();
		u1.setName("CZS") ;
		User u2 = new User() ;
		u2.setName("LMY") ;
		Group g = new Group();
		g.setName("g1") ;
		Set<User> users = new HashSet<User>() ;
		users.add(u1) ;
		users.add(u2) ;
		g.setUsers(users) ;
		u1.setGroup(g) ;
		u2.setGroup(g) ;
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		session.save(g) ;
		session.getTransaction().commit() ;
	}
分享到:
评论

相关推荐

    easyadmin一键生成指令php think curd(关联语句+sql文件)

    一键生成指令php think curd(关联语句+sql文件) EasyAdmin框架以内置快速生成CURD的命令, 包括控制器、视图、模型、JS文件。能够使开发者效率得到进一步提升。 备注:在进行CURD命令行之前, 请按照规范设计表结构, ...

    thinkPHP之CURD开发简单源码

    这篇关于"thinkPHP之CURD开发简单源码"的内容,旨在帮助新手快速理解和掌握如何在ThinkPHP框架下进行基本的数据操作。 首先,创建(Create)数据通常涉及到向数据库中插入新的记录。在ThinkPHP中,你可以通过Model...

    ThinkPHP CURD方法之where方法详解

    ThinkPHP的ORM(对象关系映射)系统在模型类中实现了各种数据库操作方法,其中 CURD 操作是基础且核心的部分,代表了创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。而其中的where方法是查询...

    angularjs CURD Example

    你需要定义一个模型,然后调用它的`$save()`方法。 2. **读取(Read)**:读取数据是通过GET请求从服务器获取。在AngularJS中,可以使用$http服务或ngResource模块的`$query()`或`$get()`方法。通常,你会在控制器...

    SpringMVC之CURD小Demo适合新手学习

    SpringMVC之CURD小Demo适合新手学习,没有具体的链接数据库,利用map保存数据,相当于数据库,新手学习阶段自己的一些总结,希望能帮到大家

    所有使用数据库的Web应用都\"just CURD Apps(只是CURD应用)

    标题中的“所有使用数据库的Web应用都'just CURD Apps(只是CURD应用)'”指的是在Web开发中,大部分应用程序的核心功能围绕着四个基本操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete),简称CURD...

    通过ext实现CURD

    本教程将详细讲解如何利用EXT实现SQL Server数据表的CURD操作,并提供一个可以直接使用的EXT应用程序示例。 **1. CURD操作** CURD是数据库操作的基本概念,代表Create(创建)、Read(读取)、Update(更新)和...

    ASP .net MVC5(C#)新手学习CURD

    **Entity Framework (EF)**: EF是微软的ORM(对象关系映射)工具,它允许开发者使用C#对象直接操作数据库,而无需编写SQL语句。在ASP.NET MVC5中,EF通常通过DbContext类与数据库交互,提供方便的Linq查询语法和改变...

    MVC+LINQ进行CURD操作

    在ASP.NET MVC3项目中,结合Entity Framework或NHibernate等ORM(对象关系映射)工具,可以利用LINQ轻松实现对数据库的CURD(创建Create、读取Read、更新Update、删除Delete)操作。 下面,我们将深入探讨如何在MVC...

    ThinkPHP CURD方法之data方法详解

    data方法是ThinkPHP CURD操作中的一个重要组成部分,它主要用来设置模型对象的数据属性,并可以与其他CURD操作方法配合使用,实现对数据的读取或写入。 在ThinkPHP中,data方法通常用于设置数据对象的值,无论是在...

    Spring Boot 整合 SSM 下 CURD 示例

    8. **CURD操作**: CRUD操作包括Create(创建)、Read(读取)、Update(更新)和Delete(删除)。在SSM中,这些操作可以通过Service层的方法实现,例如,使用`insert()`、`selectById()`、`updateById()`和`...

    postgreSQL的CURD和存储过程

    在数据库管理领域,PostgreSQL是一种广泛应用的关系型数据库管理系统(RDBMS),以其强大的功能和开源特性受到广大开发者青睐。本文将深入探讨PostgreSQL中的CURD操作以及存储过程,并结合jdbc、hibernate、ibatis三...

    mongodb_node.js:mongodb和node.js的基本学习,和Mongoos框架的学习CURD 和关联关系

    总的来说,"mongodb_node.js"的学习涵盖了MongoDB和Node.js的基础知识,包括如何在Node.js环境中使用MongoDB进行数据操作,以及如何利用Mongoose这个强大的框架进行数据模型定义和关联关系管理。同时,也提到了开发...

    curd oracle.

    curd oracle. curd oracle. curd oracle.

    java后台+easyui完整curd

    Java后台结合EasyUI实现CURD操作是Web...这个“java后台+easyui完整curd”的项目为初学者提供了学习Java Web开发的实用范例,涵盖了后端编程、前端设计和数据库操作等多个方面,有助于提升开发者综合运用技术的能力。

    thinkphp CURD完整案例

    通过学习和实践这个"thinkphp CURD完整案例",开发者可以深入理解如何在ThinkPHP框架下进行数据库操作,这对于构建动态Web应用来说是至关重要的技能。同时,这也是提升PHP编程能力和数据库管理能力的有效途径。

    ThinkPHP CURD方法之table方法详解

    - ThinkPHP CURD方法之`field`方法详解 - ThinkPHP CURD方法之`data`方法详解 - ThinkPHP CURD方法之`order`方法详解 - ThinkPHP CURD方法之`page`方法详解 - ThinkPHP CURD方法之`limit`方法详解 - ThinkPHP ...

    ThinkPHP CURD方法之order方法详解

    - [ThinkPHP CURD方法之field方法详解](你可能感兴趣的文章链接) - [ThinkPHP CURD方法之data方法详解](你可能感兴趣的文章链接) - [ThinkPHP CURD方法之table方法详解](你可能感兴趣的文章链接) - [ThinkPHP CURD...

    Hibernate学习笔记(1-13)

    【Hibernate学习笔记(1-13)】是传智播客李勇的教程,涵盖了Hibernate框架的基础到进阶内容。Hibernate是一个流行的ORM(对象关系映射)框架,它旨在解决Java面向对象编程与关系型数据库之间的模型不匹配问题,即...

    一个CURD的demo

    总的来说,"一个CURD的demo"涵盖了数据库管理的核心操作,通过xxm_admin.sql文件可以学习到实际的SQL语句应用,并了解如何在实际项目中进行数据库操作。同时,这个话题也延伸到了数据库驱动的后端开发,涉及到编程...

Global site tag (gtag.js) - Google Analytics