双向多对一关系的增删改查

Person类:

package com.bjsxt.hibernate;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Person {
	private Integer id;
	private String name;
	private Group1 group1;
	@ManyToOne(cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
	public Group1 getGroup1() {
		return group1;
	}
	public void setGroup1(Group1 group1) {
		this.group1 = group1;
	}
	@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;
	}
}

Group1类(数据库中group是关键字,也可以做一个映射):

package com.bjsxt.hibernate;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class Group1 {
	private Integer id;
	private String name;
	private List<Person> persons;
	@OneToMany(mappedBy="group1",fetch=FetchType.EAGER,cascade={CascadeType.MERGE,CascadeType.REFRESH,CascadeType.REMOVE})
	public List<Person> getPersons() {
		return persons;
	}
	public void setPersons(List<Person> persons) {
		this.persons = persons;
	}
	@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;
	}
}

测试类:

package com.bjsxt.hibernate;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.Test;

public class TestPerson_group {
	private static SessionFactory sessionFactory;
	@Test
	public void testAddPerson(){
		sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
		Person person1=new Person();
		person1.setName("person1");
		Person person2=new Person();
		person2.setName("person2");
		Group1 group1=new Group1();

		group1.setName("group1");
		List<Person> persons=new ArrayList<Person>();
		persons.add(person1);
		persons.add(person2);
		person1.setGroup1(group1);
		person2.setGroup1(group1);
		group1.setPersons(persons);
		Session session=sessionFactory.getCurrentSession();
		session.beginTransaction();
		session.persist(group1);
		session.getTransaction().commit();
	}

	@Test
	public void deleteGroup1(){
		sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
		Session session=sessionFactory.getCurrentSession();
		session.beginTransaction();
		Group1 group1=(Group1) session.get(Group1.class, 1);
		List<Person> persons=group1.getPersons();
		Iterator<Person> iterator=persons.iterator();
		if(iterator.hasNext()){
			Person person=iterator.next();
			System.out.println(person.getName());
			person.setGroup1(null);

		}
		session.update(group1); 
		/*
		 * 一定要先update一下group1,
		 * 将group1的每一个user的group设置为null,同步到数据库,否则group1对应于person的关联关系没有打破*/
		group1.setPersons(null);
		session.delete(group1);
		session.getTransaction().commit();
		System.out.println(group1.getName());
	}

	@Test
	public void deleteUser(){
		sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
		Session session=sessionFactory.getCurrentSession();
		session.beginTransaction();
		/*Person person=(Person) session.get(Person.class, 3);
		person.setGroup1(null);
		session.delete(person);*/

		/*
		 * 或者直接写HQL删除*/
		session.createQuery("delete from Person p where p.id=4").executeUpdate();
		session.getTransaction().commit();

	}

	@Test
	public void updatePerson(){
		sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
		Session session=sessionFactory.getCurrentSession();
		session.beginTransaction();
		Person person=(Person) session.get(Person.class, 1);
		person.setGroup1(null);
		session.update(person);
		session.getTransaction().commit();

	}

	@Test
	public void updateGroup1(){
		sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
		Session session=sessionFactory.getCurrentSession();
		session.beginTransaction();
		Group1 group1=(Group1) session.get(Group1.class, 1);
		group1.setPersons(null);
		session.update(group1);
		session.getTransaction().commit();

	}
}
时间: 2024-10-03 21:44:14

双向多对一关系的增删改查的相关文章

hibernate多对多关系配置--增删改查

hibernate多对多关联配置--并实现增删改查 hibernate就不多介绍了,这里就直接上我项目中使用的例子做说明. 数据模型 这是项目中用户和用户组的数据模型er图草稿,具体的model对象字段就以项目中的为主了. model类以及pojo接口,这里pojo接口用不上,大家测试的时候也可以去掉 package com.supre.model; import java.io.Serializable; import java.util.Set; public class User { pr

Django 多对多关系的增删改查

目录 Django多对多数据增删改查 1.表结构及基本方法 2.查 3.增 4.改 Django多对多数据增删改查 1.表结构及基本方法 1.表结构 # models.py class Book(models.Model): author = models.ManyToMany(to='author', relate_name='author') """ ...字段 """ class author(models.Model): "&q

基于表关系的增删改查

创建四表,author,book,publish,author-detail 存在多对多,一对一,多对一的关系 在models里创建 class Pulish(models.Model): id=models.AutoField(primary_key=True) name=models.CharField(max_length=32) address=models.CharField(max_length=32) class Book(models.Model): id=models.Auto

Python 集合的各种操作 数学运算 关系操作 增删改查 生成式

# 集合是无序的 是可变的 不能重复 允许数学运算 分散存储 # 创建# collegel = {'哲学','经济学','法学','教育学'}## # {'教育学', '经济学', '法学', '哲学'}# print(collegel)## # set# collegel2 = set(['金融学','哲学','经济学','法学','教育学'])# print(collegel2)## # 使用set创建字符串集合# collegel3 = set('中华人民共和国')# # {'共', '华

多对多表的增删改查与drf的分页

目录 类的约束 面向对象的继承 处理 多对多实列 查询 单条或多条 增加 编辑 更新 总结 分页器 为什么要使用分页 方式1 方式2 方式3 分页的另一种方式 分页出现的警告问题 了解 总结 类的约束 继承 必须继续 定义 不然报错 # 约束子类中必须实现f1 class Base(object): def f1(self): raise NotImplementedError('必须要定义此规则') class Foo(Base): def f1(self): print(123) obj =

SSH学习四 Hibernate多对一的关系 + 增删改查

多对一关系实现起来不难,只需要在"多"的一方声明外键,声明外键在类的映射文件实现. 下面以老师学生为例,老师是1,学生是多 有一个有趣的地方,在Student类里面,没有声明teacherid这个属性,但是只要在配置文件声明了外键,那么就算类里面没有外键,配置文件的property也没有teacherid 下面是几个关键文件: 1.Student类(包含Student的增删改查) package com.learn.po; import org.hibernate.Session; i

EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD)

前言 此文章只是为了给新手程序员,和经验不多的程序员,在学习ef和lambada表达式的过程中可能遇到的问题. 本次使用订单表和员工表建立多对多关系. 首先是订单表: public class Order { public int OrderId { get; set; } public string OrderTitle { get; set; } public string CustomerName { get; set; } public DateTime TransactionDate

SQLAlchemy 增删改查 一对多 多对多

安装介绍 创建 增删改查相关操作 高级版查询操作 高级版更新操作 扩展内容 安装介绍 - SQLAlchemy 是Python的一款Orm框架 创建 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String #创建基类,相当于Django中的 models.Model,被各个数

SQLAlchemy增删改查 一对多 多对多

一.前言: Python的ORM框架SQLAlchemy有些人相信也听过这个框架的大名了,也听说了SQLAlchemy没有Django的Models好用 我这里辟谣一下:Models仅仅只是配置和使用比较简单,因为他是Django自带的ORM框架,也正是因为Django原生的,所以兼容性远远不如SQLAlchemy,真正算的上全面的ORM框架必然是我们SQLAlchemy ORM框架,它可以在 任何使用SQL查询时使用,当然了,无论是使用什么ORM框架,都是为了方便不熟练数据库的同志们使用的,我