package com.sg.domain; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name="t_group") public class Group { private Integer id; private String descs; private Set<User> users = new HashSet<User>(); @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getDescs() { return descs; } public void setDescs(String descs) { this.descs = descs; } @OneToMany(mappedBy="group",cascade={CascadeType.ALL},fetch=FetchType.EAGER) public Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; } }
package com.sg.domain; 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 Integer id; private String name; private Group group; @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToOne(cascade={CascadeType.ALL}) @JoinColumn(name="groupId") public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } }
package com.sg.hibernate.Test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.sg.domain.Group; import com.sg.domain.User; public class TeacherTest { private static SessionFactory sf = null; @BeforeClass public static void beforeClass(){ new SchemaExport(new AnnotationConfiguration().configure()).create(false, true); sf = new AnnotationConfiguration().configure().buildSessionFactory(); } @AfterClass public static void afterClass(){ sf.close(); } @Test public void testSaveUser(){ User u = new User(); u.setName("sungang"); Group g = new Group(); g.setDescs("nihao"); u.setGroup(g); Session session = sf.getCurrentSession(); Transaction tr = session.beginTransaction(); //可以手动添加 //session.save(g); //也可以靠级联关系 session.save(u); tr.commit(); } @Test public void testSaveGroup(){ User u1 = new User(); u1.setName("u11"); User u2 = new User(); u2.setName("u22"); Group g = new Group(); g.setDescs("group1"); g.getUsers().add(u1); g.getUsers().add(u2); // u1.setGroup(g); u2.setGroup(g); Session session = sf.getCurrentSession(); Transaction tr = session.beginTransaction(); //可以手动添加 //session.save(u1); //session.save(u2); //也可以靠级联关系 session.save(g); tr.commit(); } @Test public void testGetUser(){ //取多的那一方 默认会把一的一方也取出来 不需要去配置级联关系 /** * select user0_.id as id2_1_, user0_.groupId as groupId2_1_, user0_.name as name2_1_, group1_.id as id3_0_, group1_.descs as descs3_0_ from t_user user0_ left outer join t_group group1_ on user0_.groupId=group1_.id where user0_.id=? */ testSaveGroup(); Session session = sf.getCurrentSession(); Transaction tr = session.beginTransaction(); User user = (User)session.get(User.class, 1); System.out.println(user.getName()); System.out.println(user.getGroup().getId()); tr.commit(); } @Test public void testGetGroup(){ testSaveGroup(); //取一的那一方 默认不会把多的一方也取出来 就是有级联关系也不会取出 //要想取出来 需要配置fetch=FetchType.EAGER /** * select group0_.id as id3_1_, group0_.descs as descs3_1_, users1_.groupId as groupId3_, users1_.id as id3_, users1_.id as id2_0_, users1_.groupId as groupId2_0_, users1_.name as name2_0_ from t_group group0_ left outer join t_user users1_ on group0_.id=users1_.groupId where group0_.id=? */ Session session = sf.getCurrentSession(); Transaction tr = session.beginTransaction(); Group g = (Group) session.get(Group.class, 1); for(User u : g.getUsers()){ System.out.println(u.getName()+"======"); } } @Test public void testUpdateUser(){ //更新多的一方 会相应的可以把一的一方也更新 不需配置级联就可以 testSaveGroup(); Session session = sf.getCurrentSession(); Transaction tr = session.beginTransaction(); User user = (User)session.get(User.class, 1); user.setName("user"); user.getGroup().setDescs("descs"); session.update(user); tr.commit(); } @Test public void testUpdateUser2(){ //更新多的一方 在游离状态更新 要想更新一的一方 需要配置级联ALL testSaveGroup(); Session session = sf.getCurrentSession(); Transaction tr = session.beginTransaction(); User user = (User)session.get(User.class, 1); tr.commit(); user.setName("user1"); user.getGroup().setDescs("descs1"); Session session2 = sf.getCurrentSession(); Transaction tr2 = session2.beginTransaction(); session2.update(user); tr2.commit(); } @Test public void testDeleteUser(){ // testSaveGroup(); Session session = sf.getCurrentSession(); Transaction tr = session.beginTransaction(); User user = (User)session.load(User.class, 1); //先结束关联关系 //user.setGroup(null); //session.delete(user); //也可以直接hql session.createQuery("delete User u where u.id=1").executeUpdate(); tr.commit(); } @Test public void testDeleteGroup(){ // testSaveGroup(); Session session = sf.getCurrentSession(); Transaction tr = session.beginTransaction(); Group g = (Group)session.load(Group.class, 1); //先结束关联关系 //user.setGroup(null); //session.delete(user); //也可以直接hql //session.createQuery("delete User u where u.id=1").executeUpdate(); //取出所有的user 并把之间的关系全部解除 //for(User user : g.getUsers()){ //user.setGroup(null); //} session.createQuery("delete Group g where g.id = 1").executeUpdate(); //session.delete(g); tr.commit(); } @Test public void testExport(){ new SchemaExport(new AnnotationConfiguration().configure()).create(false, true); } }
相关推荐
本文将深入探讨Hibernate中的关联关系、CRUD操作以及集合映射(基于注解的方式)。关联关系是数据库设计中的核心概念,而Hibernate通过注解使得这种关系在代码中得以体现,简化了开发工作。 ### Hibernate关联关系 ...
在Hibernate中,映射是将对象模型与关系数据库之间的桥梁,通过XML配置文件或注解,我们可以定义对象与表之间的关系,以便于对象的CRUD(创建、读取、更新、删除)操作对应到数据库的SQL操作。 1. **单向一对一映射...
本教程将重点讲解如何在Hibernate中实现多对一的映射关系,采用的是注解方式进行配置。 **一、多对一关系** 在数据库设计中,多对一关系表示一个实体可以与另一个实体的多个实例相关联。例如,一个部门可以有多名...
10. **实体关系映射**:虽然标题提到“单表映射”,但可以扩展讨论到多对一、一对多、多对多等关联关系的映射。 通过这个“Hibernate初之单表映射学习例子”,初学者可以掌握Hibernate的基本操作,为进一步深入学习...
3. **映射文件**:使用`hibernate-mapping`标签定义,或者使用Java注解,描述实体类与数据库表之间的映射规则。 4. **SessionFactory和Session接口**:SessionFactory是线程安全的,用于创建Session实例。Session是...
在Java的持久化框架Hibernate中,双向一对多关联映射是一种常见的关系映射方式,它模拟了数据库中的外键关联,使得一个实体可以拥有多个另一个实体的实例。在这个注解版的实现中,我们将深入探讨如何使用Hibernate的...
在Java类上使用特定的Hibernate注解可以声明实体类及其属性与数据库表的对应关系。例如,`@Entity`注解标识一个类为Hibernate实体,`@Table`指定对应的数据库表名,`@Id`标记主键字段,`@GeneratedValue`定义主键...
4. **创建实体类**:根据数据库表结构,创建对应的Java实体类,并使用Hibernate的注解进行ORM(对象关系映射)配置。 5. **DAO层设计**:创建Hibernate的Data Access Object(DAO)接口和实现类,这里包含对数据库...
在Java企业级开发中,对象关系映射(Object-Relational Mapping,ORM)框架如Hibernate极大地简化了数据库操作,使得开发者可以更专注于业务逻辑,而不是繁琐的数据访问代码。本篇将深入探讨Hibernate如何实现单表的...
确保数据库与Hibernate映射文件一致,能正确地反映实体之间的关系。导入DBO到SQL Server数据库后,就可以通过Hibernate的Session接口进行CRUD(创建、读取、更新、删除)操作了。 在开发过程中,理解并熟练运用这些...
4. **生成持久化代码**: 反向工程还会生成基于这些实体的Hibernate配置文件(hbm.xml或使用注解的方式),定义了表与类之间的映射关系。 接下来,视频会涵盖CRUD(创建、读取、更新、删除)操作,这是任何数据库...
在Hibernate中,注解用于将Java类与数据库表关联,以及将类的属性与表的列对应起来,从而实现了对象关系映射(ORM)。 1. **实体类注解**: - `@Entity`:标记一个Java类为数据库中的一个实体表,相当于传统的...
Hibernate通过XML配置文件(hibernate.cfg.xml)定义数据库连接参数,并在实体类(Entity Class)上使用注解或XML映射文件(hbm.xml)来指定与数据库表的对应关系。SessionFactory是Hibernate的主要入口点,用于创建...
在这个“Hibernate注解配置表映射实例”中,我们将深入探讨如何使用Hibernate的注解来配置实体类与数据库表之间的映射。 Hibernate注解提供了在Java类和类属性上直接定义数据库映射的能力,避免了XML配置文件的繁琐...
本教程“Hibernate关联映射.rar”聚焦于Hibernate中的关联映射,特别是多对一和一对多的关系映射,非常适合初学者了解和实践。 首先,我们要理解什么是关联映射。在数据库中,表与表之间存在各种关系,如一对一、一...
本文将详细探讨如何使用Hibernate映射集合属性List,以及如何让Hibernate自动创建对应的数据库表,无需手动编写SQL语句。 首先,我们需要理解Hibernate的映射机制。Hibernate通过ORM(对象关系映射)技术将Java对象...
本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一个实际的demo演示它们在增删查改操作中的应用。 首先,我们要理解什么是数据库的关联关系。在数据库设计中,我们经常遇到一种情况,即一个实体可能与...
在这个“hibernate 多对多映射实例,学生 选课”项目中,我们将探讨如何使用Hibernate处理多对多关系,以及如何构建一个学生选课的系统。 首先,我们要理解多对多关系。在现实生活中,学生和课程之间就是一个典型的...
在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,使得开发者无需直接编写SQL语句,就能实现对象与关系数据库之间的映射。本教程将深入讲解如何使用Hibernate进行基本的创建(Create)、...
Hibernate是一个开源的ORM框架,它通过XML配置文件或者注解将Java对象映射到关系数据库表,实现了对象与关系数据之间的转换。这使得开发者可以使用面向对象的方式来操作数据库,降低了数据库操作的复杂性。 ### 二...