Hibernate的一对多增改级联操作
2015-08-14 21:40
375 查看
建立两张表:student,grade。
创建语句:create table grade(id int(10) auto_increment primary key,gragename varchar(40));
create table student(id int (10) auto_increment primary key,name varchar(40),password varchar(40),sex varchar(40),foregin key(id) reference grade(id));
这个创建语句表明grade的主键id是student的外键id
之后的方法同上篇user的创建方法相同。
package dao;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import entity.Grade;
import entity.Student;
/**
* 测试一对多
* @author Administrator
*
*/
public class TestRelation {
private static SessionFactory sessionFactory=null;
private static Session session=null;
Transaction transaction=null;
static {
try {
sessionFactory=new Configuration().configure().buildSessionFactory();
} catch (Exception e) {
// TODO: handle exception
}
}
public static void saveGradeAndStudent(){
Grade grade =new Grade();
grade.setGradename("第三期");
Student student=new Student();
student.setName("zhangsan");
student.setPassword("1345");
student.setAge(12);
//当grade.hbm.xml中inverse=true表明有学生维护班级的关联关系
//grade-student-relation这张表,需要学生向该表插入数据
student.setGrade(grade);
//当grade.hbm.xml中inverse=false表明有班级维护学生关联关系,区别是多执行一个updata
//grade.getStudents().add(student);
session=sessionFactory.openSession();
session.save(grade);
session.save(student);
session.beginTransaction().commit();
session.close();
}
/**
关联查询(级联查询)
延迟加载机制(面试题)
*/
public static void queryAllGradeAndStudent(){
session =sessionFactory.openSession();
List list =session.createQuery("from Grade").list();
for(int i=0;i<list.size();i++){
Grade grade=(Grade) list.get(i);
Set studentset=grade.getStudents();
System.out.println(studentset);
}
}
/**
* 删除机制(级联删除)
* @param id
*/
public static void deleteALLGradeAndStudent(Integer id){
Session session=sessionFactory.openSession();
Grade grade =(Grade) session.get(Grade.class, id);
try {
session.beginTransaction();
session.delete(grade);
session.getTransaction().commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
session.close();}
}
public static void updateAllGradeAndStudent(){
Session session=sessionFactory.openSession();
//Grade grade =(Grade) session.get(Grade.class, id);
//Set set=grade.getStudents();
try {
session.beginTransaction();
Iterator student=(Iterator) session.createQuery("from Student").list().iterator();
while(student.hasNext()){
Student student2=(Student) student.next();
student2.setName(student2.getName()+1);
// Grade grade2=(Grade) grade.next();
// grade2.setId(grade2.getId()+1);
}
// grade.setId(11);
// grade.setGradename("测试");
//session.update(grade);
session.getTransaction().commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
session.close();
}
}
/**
* 根据名字级联更新
*/
public static void updateAllGrade1AndStudent1(Integer id){
session=sessionFactory.openSession();
Grade grade=(Grade) session.get(Grade.class, id);
session.beginTransaction();
//grade.setGradename("dai");
//grade1.setId(13);
Set studentSet=grade.getStudents();
Iterator iterStu=studentSet.iterator();
while(iterStu.hasNext()){
Student student=(Student) iterStu.next();
student.setAge(student.getAge()+8);
System.out.println(student);
session.getTransaction().commit();
}session.close();
}
public static void main(String[] args) {
//saveGradeAndStudent();
//queryAllGradeAndStudent();
//deleteALLGradeAndStudent(new Integer(2));
updateAllGradeAndStudent();
//updateAllGrade1AndStudent1(7);
}
}
创建语句:create table grade(id int(10) auto_increment primary key,gragename varchar(40));
create table student(id int (10) auto_increment primary key,name varchar(40),password varchar(40),sex varchar(40),foregin key(id) reference grade(id));
这个创建语句表明grade的主键id是student的外键id
之后的方法同上篇user的创建方法相同。
package dao;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import entity.Grade;
import entity.Student;
/**
* 测试一对多
* @author Administrator
*
*/
public class TestRelation {
private static SessionFactory sessionFactory=null;
private static Session session=null;
Transaction transaction=null;
static {
try {
sessionFactory=new Configuration().configure().buildSessionFactory();
} catch (Exception e) {
// TODO: handle exception
}
}
public static void saveGradeAndStudent(){
Grade grade =new Grade();
grade.setGradename("第三期");
Student student=new Student();
student.setName("zhangsan");
student.setPassword("1345");
student.setAge(12);
//当grade.hbm.xml中inverse=true表明有学生维护班级的关联关系
//grade-student-relation这张表,需要学生向该表插入数据
student.setGrade(grade);
//当grade.hbm.xml中inverse=false表明有班级维护学生关联关系,区别是多执行一个updata
//grade.getStudents().add(student);
session=sessionFactory.openSession();
session.save(grade);
session.save(student);
session.beginTransaction().commit();
session.close();
}
/**
关联查询(级联查询)
延迟加载机制(面试题)
*/
public static void queryAllGradeAndStudent(){
session =sessionFactory.openSession();
List list =session.createQuery("from Grade").list();
for(int i=0;i<list.size();i++){
Grade grade=(Grade) list.get(i);
Set studentset=grade.getStudents();
System.out.println(studentset);
}
}
/**
* 删除机制(级联删除)
* @param id
*/
public static void deleteALLGradeAndStudent(Integer id){
Session session=sessionFactory.openSession();
Grade grade =(Grade) session.get(Grade.class, id);
try {
session.beginTransaction();
session.delete(grade);
session.getTransaction().commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
session.close();}
}
public static void updateAllGradeAndStudent(){
Session session=sessionFactory.openSession();
//Grade grade =(Grade) session.get(Grade.class, id);
//Set set=grade.getStudents();
try {
session.beginTransaction();
Iterator student=(Iterator) session.createQuery("from Student").list().iterator();
while(student.hasNext()){
Student student2=(Student) student.next();
student2.setName(student2.getName()+1);
// Grade grade2=(Grade) grade.next();
// grade2.setId(grade2.getId()+1);
}
// grade.setId(11);
// grade.setGradename("测试");
//session.update(grade);
session.getTransaction().commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
session.close();
}
}
/**
* 根据名字级联更新
*/
public static void updateAllGrade1AndStudent1(Integer id){
session=sessionFactory.openSession();
Grade grade=(Grade) session.get(Grade.class, id);
session.beginTransaction();
//grade.setGradename("dai");
//grade1.setId(13);
Set studentSet=grade.getStudents();
Iterator iterStu=studentSet.iterator();
while(iterStu.hasNext()){
Student student=(Student) iterStu.next();
student.setAge(student.getAge()+8);
System.out.println(student);
session.getTransaction().commit();
}session.close();
}
public static void main(String[] args) {
//saveGradeAndStudent();
//queryAllGradeAndStudent();
//deleteALLGradeAndStudent(new Integer(2));
updateAllGradeAndStudent();
//updateAllGrade1AndStudent1(7);
}
}
相关文章推荐
- iOS_UIImage中 + imageNamed: 和 + imageWithContentsOfFile:两个方法的区别
- Number of 1 Bits
- 算法的时间复杂度
- hdu 1002 A + B Problem II(大正整数相加)
- 112 Path Sum
- java通过JDBC链接SQLServer2012
- hadoop论坛实战项目
- 并发技巧
- 使用Nexus配置Maven私有仓库
- android Service显示Notification浅析
- HDU1003---Max Sum
- mysql事务隔离级别以及乐观锁悲观锁
- 2015-08-11 [豌豆荚]--研发--2面
- 数树数
- Eclipse中调试技巧
- list2
- Java学习之路0810(建立与数据库的连接)
- SpringMVC+Jquery -页面异步加载数据
- [Leetcode] Divide Two Integers
- poj 1651 Multiplication Puzzle(区间dp)