Hibernate: 关联关系一对多映射
2014-11-22 07:40
363 查看
gitHub
一对多单向映射 (Student 获取Class )
新建Student 类, Class 类, 设置Id, name; get, set方法
在Student 类下增添 private Class c;
Student.hbm.xml中 添加
设置Class.hbm.xml
添加Hibernate.cfg.xml
在<session-factory>标签里添加
设置测试类
一对多双向映射 (Class 获取Student )
使用set集合在Class 类中添加Student 属性
添加get set
在Class.hbm.xml,<class>中添加
在测试类中添加student 到set 中
通过Class 打印学生
一对多 双向自身关联关系映射
在model 中设置Node
定义四条属性
在Node.hbm.xml
测试类中
一对多单向映射 (Student 获取Class )
新建Student 类, Class 类, 设置Id, name; get, set方法
在Student 类下增添 private Class c;
Student.hbm.xml中 添加
<many-to-one name="c" column="classId" class="com.base.model.Class"></many-to-one> //多对一
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.base.model"> <class name="Student" table="t_student"> <!-- 类名与对应的数据表名 --> <id name="id" column="stuId"> <!-- 字段名,设置主键 --> <generator class="native"/> </id> <property name="name"/> <!--普通字段 --> <many-to-one name="c" column="classId" class="com.base.model.Class"></many-to-one> //多对一 </class> </hibernate-mapping>
设置Class.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.base.model"> <class name="Class" table="t_class"> <!-- 类名与对应的数据表名 --> <id name="id" column="classId"> <!-- 字段名,设置主键 --> <generator class="native"/> </id> <property name="name" column="className"/> <!--普通字段 --> </class> </hibernate-mapping>
添加Hibernate.cfg.xml
在<session-factory>标签里添加
<mapping resource="com/base/model/Student.hbm.xml"/> <!-- xml版使用resource --> <mapping resource="com/base/model/Class.hbm.xml"/> <!-- xml版使用resource -->
设置测试类
public class StudentCalssTest2Test { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //由于每个步骤都会用到所以移到外面来 Session session; @Before public void setUp() throws Exception { session = sessionFactory.openSession(); //生成一个新的session session.beginTransaction(); //开启事物 } @After public void tearDown() throws Exception { session.getTransaction().commit(); //提交事务 session.close(); //关闭session } @Test public void testTestAdd() { //简单添加示例 Class c = new Class(); c.setName("2013级"); session.save(c); Student s1 = new Student(); //创建一个学生 s1.setName("zhansan"); //设置名称 s1.setC(c); session.save(s1); //保存学生 Student s2 = new Student(); //创建一个学生 s2.setName("李四"); //设置名称 s2.setC(c); session.save(s2); //保存学生 } }
一对多双向映射 (Class 获取Student )
使用set集合在Class 类中添加Student 属性
private Set<Student> students = new HashSet<Student>(); //班级对应的学生
添加get set
在Class.hbm.xml,<class>中添加
<set name="students" cascade="save-update"> <!-- 对应的多对一映射, cascade: 级联(可以在测试类中不需要使用session.save(c);) --> <key column="classId"></key> <!-- 对应的外键 --> <one-to-many class="com.base.model.Student"/> <!-- 设置一对多的相对类 --> </set>
在测试类中添加student 到set 中
public void testTestAdd() { //简单添加示例 Class c = new Class(); c.setName("2013级"); //session.save(c); //因为使用了级联,可以不写save Student s1 = new Student(); //创建一个学生 s1.setName("zhansan"); //设置名称 s1.setC(c); //session.save(s1); //保存学生 Student s2 = new Student(); //创建一个学生 s2.setName("李四"); //设置名称 s2.setC(c); //session.save(s2); //保存学生 c.getStudents().add(s1); c.getStudents().add(s2); session.save(c); }
通过Class 打印学生
/** * 通过Class 打印学生 */ @Test public void getStudentByClass(){ Class c = (Class)session.get(Class.class, Integer.valueOf(1)); //取得Class对象 Set<Student> students = c.getStudents(); for (Iterator iterator = students.iterator(); iterator.hasNext();) { Student student = (Student) iterator.next(); System.out.println(student); } }
一对多 双向自身关联关系映射
在model 中设置Node
定义四条属性
private int id; private String name; private Node parentNode; //父节点 private Set<Node> childNodes = new HashSet<Node>(); //设置子节点
在Node.hbm.xml
<class name="Node" table="t_node"> <!-- 类名与对应的数据表名 --> <id name="id" column="nodeId"> <!-- 字段名,设置主键 --> <generator class="native"/> </id> <property name="name" column="nodeName"/> <!--普通字段 --> <many-to-one name="parentNode" column="parentId" class="com.base.model.Node" cascade="save-update"></many-to-one> <set name="childNodes" inverse="true"> <!-- 对应的一对多映射 --> <key column="parentId"></key> <!-- 对应的外键,与many-to-one的name对应 --> <one-to-many class="com.base.model.Node"/> <!-- 设置一对多的相对类 --> </set> </class>
测试类中
@Test public void TestAdd() { Node node = new Node(); node.setName("根节点"); Node subNode1 = new Node(); subNode1.setName("子节点1"); Node subNode2 = new Node(); subNode2.setName("子节点2"); subNode1.setParentNode(node); subNode2.setParentNode(node); session.save(subNode1); session.save(subNode2); }
相关文章推荐
- Hibernate映射一对一关联关系
- Hibernate的映射关联关系
- Hibernate 映射实体关联关系(二)
- Hibernate之关联关系映射(一对多和多对一映射,多对多映射)
- hibernate映射一对多双向关联关系实例
- Hibernate 的关联关系映射
- Hibernate-映射关系- 多对多关联关系
- Hibernate第三章知识点总结——第三章--实体关联关系映射
- Hibernate one to one 关联关系映射
- Hibernate映射多对多关联关系
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接) 标签: hibernateentity 2016-10-11 16:28 1635人阅读 评论(0) 收藏 举报 分类
- Hibernate关联关系映射-----基于连接表的单向一对多映射
- hibernate映射总结详解: 映射一对多双向关联关系
- Hibernate_映射_关联关系_一对多多对一映射2、inverse属性
- Hibernate -- 映射实体关联关系(一对一关联关系)
- Hibernate关联关系映射---1对1
- Hibernate 映射关联关系
- Hibernate(八):基于外键映射的1-1关联关系
- Hibernate 实体关联关系映射【转】
- Hibernate关联关系映射实例速查