hibernate.cfg.xml同上 加入Classes 、Student
Classes.java
package com.yulin.hibernate.pojo; import java.util.LinkedHashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name="class") public class Classes extends Base { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column private Integer id; @Column private String className; @Column private Integer classNum; // cascade表示级联操作 // CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象。对应EntityManager的merge方法 // CascadeType.PERSIST级联刷新:获取order对象里也同时也重新获取最新的items时的对象。对应EntityManager的refresh(object)方法有效。即会重新查询数据库里的最新数据 // CascadeType.REFRESH级联保存:对order对象保存时也对items里的对象也会保存。对应EntityManager的presist方法 // CascadeType.REMOVE级联删除:对order对象删除也对items里的对象也会删除。对应EntityManager的remove方法 // FetchType.LAZY表示懒加载。对于xxxtoMany时即获得多的一方fetch的默认值是FetchType.LAZY懒加载。对于xxxtoOne时即获得一的一方fetch的默认值是FetchType.EAGER立即加载 // mappedBy="classes"就相当于inverse=true,(mappedBy指定的是不需要维护关系的一端) //请检查orderItems这个属性是否使用了泛型,如:Set. //如果未使用泛型,请在OneToMany注释中使用targetEntity指定元素的类型 @OneToMany(cascade = { CascadeType.ALL}, fetch = FetchType.LAZY ,targetEntity = Student.class,mappedBy="classes") private Set students= new LinkedHashSet(); public Set getStudents() { return students; } public void setStudents(Set students) { this.students = students; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public Integer getClassNum() { return classNum; } public void setClassNum(Integer classNum) { this.classNum = classNum; } }
Student.java
package com.yulin.hibernate.pojo; import java.util.LinkedHashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table public class Student extends Base { public Student(){} @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Integer id; @Column(name="studentName") private String name; @Column(name="studentAge") private Integer age; // cascade表示级联。CascadeType.REFRESH级联刷新 // optional表示该对象可有可无,它的值为true表示该外键可以为null,它的值为false表示该外键为not null @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER, optional = false) // JoinColumn表示外键的列 @JoinColumn(name="classId") private Classes classes; public Classes getClasses() { return classes; } public void setClasses(Classes classes) { this.classes = classes; } 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; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
Test.java
package com.yulin.hibernate.test; import java.util.Date; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import com.yulin.hibernate.pojo.Classes; import com.yulin.hibernate.pojo.Person; import com.yulin.hibernate.pojo.Role; import com.yulin.hibernate.pojo.Student; import com.yulin.hibernate.pojo.Users; public class Test { public static final SessionFactory sessionFactory; static { sessionFactory = new AnnotationConfiguration().configure( "/hibernate.cfg.xml").buildSessionFactory(); } public static final ThreadLocal session = new ThreadLocal(); public static Session currentSession() throws HibernateException { Session s = session.get(); if (s == null) { s = sessionFactory.openSession(); session.set(s); } return s; } public static void closeSession() throws HibernateException { Session s = session.get(); if (s != null) { s.close(); } session.set(null); } public static void delOneToMany(){ Session session=currentSession(); org.hibernate.Transaction tran=session.beginTransaction(); Student student=(Student)session.get(Student.class, 5); session.delete(student); tran.commit(); closeSession(); } public static void addOneToMany(){ Session session=currentSession(); org.hibernate.Transaction tran=session.beginTransaction(); Classes classs= new Classes(); classs.setClassName("1班"); classs.setClassNum(1); Student student = new Student(); student.setName("小李"); student.setAge(12); student.setClasses(classs); Student student1 = new Student(); student1.setName("小娇"); student1.setAge(10); student1.setClasses(classs); classs.getStudents().add(student); classs.getStudents().add(student1); session.save(classs); tran.commit(); closeSession(); } public static void main(String[] args) { addOneToMany(); //delOneToMany(); } }
相关推荐
Hibernate双向一对一关联映射(注解版)
NULL 博文链接:https://profound-accumulation.iteye.com/blog/2243079
使用hibernate的注解配置可以很好的完成跟实体的映射。而且还可以通过注解配置,可以完成多对一,一对多等关系的配置,非常好。
ssh全注解项目(一对一,一对多,多对多),hibernate的注解配置及映射关系
* @OneToMany 设置一对多关联。cascade属性指定关联级别,参考@OneToOne中的说明。fetch指定是否延迟加载,值为FetchType.LAZY表示延迟,为FetchType.EAGER表示立即加载 * 方法一 使用这种配置,在为“一端”添加“多...
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式以后,发现使用...
于是我花了几天时间搭建出来的hibernate+springmvc的框架,这个框架去除hibernate配置, 将配置全部整合到spring中,开发中使用注解开发即可,很方便,以后我还会持续更新的。 这是一个maven项目,放在eclipse中,改...
重点包括一对一,一对多及多对多关系的配置代码实例。 myeclipse项目工程导入即可运行(需要自行导入hibernat4.1.4包依赖(myeclipse中自带此包))。每个实例均附说明及mysql的库表sql。另,如果要测试代码中的hbm2...
hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式
一个完成了hibernate的注解和配置的简单案例;这是一个一对多【多对一】的案例,其实一对多的案例就可以解决项目中的大部分需求。因为多对多可以一般我们转化为两个多对一的案例;
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,这个是xml配置的例子
一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...
一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射复合主键与外键 2.2.7. 映射二级表...
这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType....
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...
7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...