设定cascade可以设定在持久化时对于关联对象的操作。cascade的属性指明在做什么操作的时候关联对象是绑定在一起的。
双向关联:
1.设定mappedBy
2.在程序中要设定双向关联(对象之间)
cascade管的是增删改,而fecth管的是读取
一对多关系中,一的一方,默认的fecth为LAZY,而多一方,默认的fecth为EARGE
LAZY只能取到本身对象,而EARGE可以取到关联对象
Group.java
package com.test.hiberenate.model; import java.util.HashMap; import java.util.Map; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.MapKey; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name = "t_group") public class Group { private int id; private String name; //private Set<User> users = new HashSet<User>(); //private List<User> users = new ArrayList<User>(); private Map<Integer, User> users = new HashMap<Integer, User>(); @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } /* @OneToMany(mappedBy = "group", cascade = CascadeType.ALL) public Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; }*/ /* @OneToMany(mappedBy = "group", cascade = CascadeType.ALL) @OrderBy("name desc")// 指定按照User中name的降序排列 public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; }*/ @OneToMany(mappedBy = "group", cascade = CascadeType.ALL) @MapKey(name = "id")// 指定map中的key为User中的id public Map<Integer, User> getUsers() { return users; } public void setUsers(Map<Integer, User> users) { this.users = users; } }
User.java
package com.test.hiberenate.model; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name = "t_user") public class User { private int id; private String name; private Group group; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "group_id") public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } }
HibernateORMappingTest.java
package com.test.hibernate.model; import java.util.Map; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.test.hiberenate.model.Group; import com.test.hiberenate.model.User; public class HibernateORMappingTest { private static SessionFactory sf = null; @BeforeClass public static void beforeClass() { //new SchemaExport(new Configuration().configure()).create(false, true); try { if (sf == null) { sf = new Configuration().configure().buildSessionFactory(); } } catch (HibernateException e) { e.printStackTrace(); } } @AfterClass public static void afterClass() { sf.close(); } /* @Test public void testSaveGroup() { Group group = new Group(); group.setName("人力资源部"); User user1 = new User(); user1.setName("张三"); user1.setGroup(group); User user2 = new User(); user2.setName("李四"); user2.setGroup(group); User user3 = new User(); user3.setName("王五"); user3.setGroup(group); group.getUsers().add(user1); group.getUsers().add(user2); group.getUsers().add(user3); Session session = sf.getCurrentSession(); Transaction t = session.beginTransaction(); session.save(group); t.commit(); } @Test public void testGroupForList() { testSaveGroup(); Session session = sf.getCurrentSession(); Transaction t = session.beginTransaction(); Group group = (Group) session.get(Group.class, 1); List<User> lstUser = group.getUsers(); for (int i = 0; i < lstUser.size(); i++) { System.out.println(lstUser.get(i).getName()); } t.commit(); }*/ @Test public void testGroupForMap() { Session session = sf.getCurrentSession(); Transaction t = session.beginTransaction(); Group group = (Group) session.get(Group.class, 1); Map<Integer, User> mUser = group.getUsers(); for (Map.Entry<Integer, User> entry : mUser.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue().getName()); } t.commit(); } public static void main(String[] args) { beforeClass(); } }
相关推荐
spring3.2 hibernate4 demo CRUD 完整例子
struts2 spring 2.5 hibernate3整合 CRUD实例含分页 整合版本struts2 spring 2.5 hibernate3 简单的实现了一个用户的CRUD操作(列表展示有分页版本) 设计到了Validate效验,excel生成下载
通过使用Strust2+Hibernate实现简单CRUD基本操作,有需要可以下载学习。
结合hibernate和struts2写的crud小demo
利用Hibernate编写的基本例程,完成基本的CRUD操作
Hibernate与JDBC对于数据库的性能操作对比事例,配置,更多信息资源
HibernateCRUD HibernateCRUD 学习Hibernate技术。 ER图的简单CRUD:
1.使用struts2+spring3+hibernate3整合实现用户CRUD功能。 2.使用多种配置方式 A.将hibernate从外部导入,使用MySQL作为数据库。 B.将hibernate实体映射集成到spring配置文件中。 3.使用传统的配置文件集成...
Struts_Spring_Hibernate_CRUD操作案例_-分页查询
Struts2整合Spring Hibernate的CRUD实例Struts2整合Spring Hibernate的CRUD实例
整合版本struts2 spring 2.5 hibernate3 简单的实现了一个用户的CRUD操作 设计到了Validate效验,excel生成下载 不建议下载,这是我自己写的一个测试代码,为以后查资料用的
Spring4-Struts2-Hibernate4 CRUD Demo
传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|... 20_一对一外键关联关系的映射与原理分析
SpringMVC+Hibernate +MySql+ EasyUI实现CRUD
NULL 博文链接:https://1075847650.iteye.com/blog/2269549
利用ext3+struts2+hibernate+spring的CRUD+分页这四个框架实现crud,详细说明grid的用法,
原生方式,po有xml文件,实现dept,emp的CRUD,带有sql文件。有分页实现,JSON传值。
学Java曾经遇到过crud的问题在网上找了半天资料都不是很详细,现在终于会了就把他们总结了一下,希望对everyboday 都有所帮助: