Hibernate 一对多 多对一 实例 及一些 问题(1)插入及查询

2023-11-09

 Clazz.java

/**
 * 
 */
package com.wonders.task.sample.bo;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Version;

import org.hibernate.annotations.GenericGenerator;


/** 
 * @ClassName: Clazz 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author zhoushun 
 * @date 2014年2月27日 上午11:48:47 
 *  
 */
@Entity 
@Table(name="Z_CLASS") 
public class Clazz implements java.io.Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -6224738252966513441L;
	
	private int version;
	private String id;
	private String name;
	private Set<Student> set;
	private Teacher teacher;
	
	 @Version
	    @Column(name = "version")
	public int getVersion() {
		return version;
	}
	public void setVersion(int version) {
		this.version = version;
	}
	@Id
	@GeneratedValue(generator="system-uuid")
	@GenericGenerator(name="system-uuid", strategy = "uuid")
	@Column(name = "ID")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
	@Column(name = "NAME", length = 500)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@OneToMany(cascade=CascadeType.ALL,mappedBy="clazz") 
	//@OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH},mappedBy="clazz") 
	public Set<Student> getSet() {
		return set;
	}
	public void setSet(Set<Student> set) {
		this.set = set;
	}
	
	@OneToOne(cascade=CascadeType.ALL,mappedBy="clazz") 
	public Teacher getTeacher() {
		return teacher;
	}
	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	
	
	
}

Student.java

/**
 * 
 */
package com.wonders.task.sample.bo;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Where;

/** 
 * @ClassName: Student 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author zhoushun 
 * @date 2014年2月27日 上午11:48:30 
 *  
 */

@Entity 
@Table(name="Z_STUDENT") 
public class Student {
	private String id;
	private String name;
	private Clazz clazz;
	private String classId;
	
	@Id
	@GeneratedValue(generator="system-uuid")
	@GenericGenerator(name="system-uuid", strategy = "uuid")
	@Column(name = "ID")
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
	@Column(name = "NAME", length = 500)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	//@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE}) 
	@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.LAZY) 
	@JoinColumn(name="class_id")
  	//@ManyToOne
  	//@Cascade(value=org.hibernate.annotations.CascadeType.SAVE_UPDATE)
	//@JoinColumn(name="class_id" ,nullable = true,insertable=false,updatable=false)     //student类中对应外键的属性:classid 
	//@Where(clause = "removed=0")
	public Clazz getClazz() {
		return clazz;
	}
	public void setClazz(Clazz clazz) {
		this.clazz = clazz;
	}
	
	@Transient
	@Column(name = "CLASS_ID", length = 50)
	public String getClassId() {
		return classId;
	}
	public void setClassId(String classId) {
		this.classId = classId;
	}
	
	
}


测试类:

/**
 * 
 */
package com.wonders.task.sample.main;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.annotation.Resource;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.wonders.schedule.util.SpringBeanUtil;
import com.wonders.task.sample.ITaskService;
import com.wonders.task.sample.bo.Clazz;
import com.wonders.task.sample.bo.Student;
import com.wonders.task.sample.bo.Teacher;

/** 
 * @ClassName: TestMain 
 * @Description: TODO(这里用一句话描述这个类的作用) 
 * @author zhoushun 
 * @date 2014年2月27日 下午12:18:44 
 *  
 */

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
/* 功能模块入口点,beanid即数据库配置中的name */
@Service("execMain")
@Scope("prototype")
public class ExecMain {
	private HibernateTemplate hibernateTemplate;
	
	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}
	
	//注入hibernateTemplate
	@Resource(name="hibernateTemplate")
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
	
	private static SessionFactory sf;
	
	
	
	public static SessionFactory getSf() {
		return sf;
	}

	@Resource(name="sessionFactory")
	public void setSf(SessionFactory sf) {
		this.sf = sf;
	}

	public static void main(String[] args){
		ApplicationContext applicationContext = null;  
		String[] fileUrl = new String[]{"classpath*:applicationContext*.xml"};  
		applicationContext = new ClassPathXmlApplicationContext(fileUrl);  		
		ExecMain main = (ExecMain)SpringBeanUtil.getBean("execMain");
		
		//1  多方插入
//		Clazz c = new Clazz();
//		c.setName("class");
//		Student s = new Student();
//		s.setName("student");
//		s.setClazz(c);
//		main.getHibernateTemplate().save(s);
		
		//2一方插入
//		Clazz c = new Clazz();
//		c.setName("class2");
//		Student s1 = new Student();
//		s1.setName("student1");
//		Student s2 = new Student();
//		s2.setName("student2");
//		s1.setClazz(c);s2.setClazz(c);
//		Set<Student> set = new HashSet<Student>();
//		set.add(s1);set.add(s2);
//		c.setSet(set);
//		main.getHibernateTemplate().save(c);
		
		//3一方查找 lazy 就报错 因为 延迟加载 一方 fetchType 默认lazy
		//解决方法:lazy改成eager  或者hql left join fetch
		//Clazz c = main.getHibernateTemplate().get(Clazz.class, "8a81a97c452741d701452741de480002");
//		String hql = "from Clazz c left join fetch c.set";
//		Session session = main.getHibernateTemplate().getSessionFactory().
//				openSession();
//		Clazz c = (Clazz) session.createQuery(hql).uniqueResult();
//		//Clazz c = (Clazz) session.get(Clazz.class, "8a81a97c452741d701452741de480002");
//		session.close();
//		System.out.println(c.getName());
//		System.out.println(c.getSet().size());
		
		//4多方查找 lazy 就报错 因为 延迟加载 多方 fetchType 默认 eager
		//解决方法:lazy改成eager  或者hql left join fetch
		//Student s = main.getHibernateTemplate().get(Student.class, "8a81a97c452741d701452741df130003");
//		String hql = "from Student s left join fetch s.clazz where s.id = '8a81a97c452741d701452741df130003'";
//		Session session = main.getHibernateTemplate().getSessionFactory().
//				openSession();
//		Student s = (Student) session.createQuery(hql).uniqueResult();
//		System.out.println(s.getClazz().getName());
	
		
		
		
		
	}
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate 一对多 多对一 实例 及一些 问题(1)插入及查询 的相关文章

  • 网页爬虫逆向与AST入门系列教程(三、使用工具生成和可视化AST)

    网页爬虫逆向与AST入门系列教程 第三部分 使用工具生成和可视化AST 在前两篇文章中 我们学习了什么是AST以及它在网页爬虫逆向中的应用 本篇将介绍一些工具和方法 帮助我们生成和可视化AST 1 AST生成工具 为了生成AST 我们可以使
  • 多重背景图片(background属性缩写)

    多重背景图片 格式 background url images animal1 png no repeat url images animal2 png no repeat 加入定位属性分开图片 background url images
  • BUUCTF——Basic

    Linux Labs 启动靶机 根据题目与ssh有关 并且给出了用户名和密码 使用kail进行渗透 SSH是一种网络协议 用于计算机之间的加密登录 它通常用于Linux系统之间的远程登录 文件传输和其他网络服务 SSH工作原理简单来说是 客
  • 【Qt编程笔记】采用遍历方式删除QList中全部元素的方法

    QList类是Qt提供的链表模板类 在日常工作和学习中经常会用到 虽然QList操作十分便利 但是在用遍历方式删除全部元素时很可能会因为疏忽造成没有将元素全部删除 从而给程序留下隐患 下面小结一下采用遍历方式删除QList中全部元素的方法
  • 由于找不到d3dx9_43.dll,有什么可靠的修复方法?

    由于找不到d3dx9 43 dll 无法继续执行代码 这种情况大家是否有遇见过 其实就算没遇到过 大家应该也有遇到别的dll文件丢失吧 道理都一样 都是dll文件丢失 我们只需要把它给修复就可以了 不同的dll只是负责的功能不一样而已 下面
  • Css层叠优先级只会这两招还远远不够

    作为一个玩前端的 ps软件中的图层都知道吧 多个图层层叠就可以组成丰富多彩的图片 所以图层就有层叠顺序了 Css的层叠原理也是差不多 只不过Css是通过多个盒子层叠形成丰富多彩的图片 Css层叠优先级设置不就是z index和 import
  • linux 测试网络连通性方法

    一 telnet 方法 telnet 协议是 TCP IP 协议族中的一员 是 Internet 远程登陆服务的标准协议和主要方式 它为用户提供了在本地计算机上完成远程主机工作的能力 因此我们可以使用telnet 来测试远程机器的连通性 t
  • VMware安装RHEL 8.2(红帽)

    一 创建虚拟机 打开VMware 点击 创建新的虚拟机 点击自定义 下一步 选择兼容性 15 x 兼容性选VMware的版本 稍后安装操作系统 选择镜像对应的操作系统类型及版本 系统镜像按自己准备的选择即可 自定义虚拟机名称及安装的位置 名
  • 数组的方法以及特征

    数组变成一个字符串 1 join 可以在每一个元素中加一个字符串 2 toString pop 删除数组最后一个元素 push 增加数组 reverse 反转 slice 从下标开始取 sort 对数组进行排序 splice 删除数组的某几
  • 取消全部呼叫转移代码_中国移动的卡取消呼叫转移的快捷方式是什么?

    展开全部 取消已设置的所有呼转可用手机拨打 002 取62616964757a686964616fe59b9ee7ad9431333365663562消关机或无信号时转移可用手机拨打 62 取消无人接听时转移可用手机拨打 61 取消遇忙音占
  • 即时通讯(IM)开源项目OpenIM对WebAssembly支持,提升web端体验

    WebAssembly 是什么 2019 年 12 月 W3C 标准批准了第四种官方语言 WebAssembly Wasm 这种语言在结构 使用和功能方面与以前的语言有很大不同 WebAssembly 是一种新的编码方式 可以在现代的Web
  • [1138]java中json的使用和解析

    文章目录 1 创建json对象 1 1 创建JSONObject对象 1 2 创建JSONArray对象 2 解析json 2 1 官方json包解析 2 2 fastjson解析 2 3 jackson解析 1 创建json对象 1 1
  • 关于时区的时间的详解,比如UTC\GMT等

    来源 UTC 和 GMT 及 北京时间的关系 UTC和GMT 这两者几乎是同一概念 它们都是指的格林尼治标准时间 只不过UTC的称呼更为正式一点 两者的区别在于前者是一个天文 上的概念 而 后者是基于一个原子钟 在UTC中 每一年或两年会有
  • 移植micropython最小工程到mm32f3270微控制器

    移植micropython最小工程到mm32f3270微控制器 苏勇 2021 08 文章目录 移植micropython最小工程到mm32f3270微控制器 Introduction 初试micropython v1 6 增加MM32的移
  • OpenCV图像梯度(Sobel和Scharr)

    OpenCV图像梯度 Sobel和Scharr 1 图像梯度是什么 2 图像梯度的用途 3 图像梯度的使用 参考 这篇博客将介绍图像渐变以及如何使用OpenCV的cv2 Sobel计算Sobel渐变和Scharr渐变 1 图像梯度是什么 图
  • CMake - 使用 target_sources() 提高源文件处理能力

    翻译自https crascit com 2016 01 31 enhanced source file handling with target sources 使用 target sources 提高源文件处理能力 在CMake项目中
  • JDK8源码阅读(三) java.io.Serializable

    一 类 1 1 类修饰符 A 是一个接口 B 类的可序列化性由实现java io serializable接口的类启用 不实现此接口的类将不具有序列化或反序列化的任何状态 可序列化类的所有子类型本身都是可序列化的 序列化接口没有方法或字段
  • 数据结构——单链表OJ题

    单链表OJ题 前言 一 删除链表中等于给定值 val 的所有节点 二 反转一个单链表 三 返回链表的中间结点 四 输出该链表中倒数第k个结点 五 将两个有序链表合并 六 链表的回文结构 七 将链表分割成两部分 八 找出第一个公共结点 九 判
  • Matlab:交叉验证,索引结果重现,打乱数据

    总会有奇奇怪怪的想法和需求 想要产生的交叉验证的索引可以重现 虽然可以采取保存的方式 目录 一 随机选取 1 产生索引 2 调用数据 打乱数据 二 顺序选择 循环选取 1 数据初始化 样本个数 训练样本个数等 2 产生训练数据的索引 3 存

随机推荐

  • 多线程编程warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 错误解决

    在多线程编程中使用 thread start pthread t thread id THREAD BODY thread workbody void thread arg 创建子线程时因为最后一个参数需要是指向子线程的文件描述符 int类
  • 使用axis2 java2wsdl命令生成wsdl文件

    1 eclipse新建web工程 编写service接口方法 2 axis2环境变量配置 必须配置环境变量 否则执行java2wsdl命令时无法识别路径 如下 新建环境变量 AXIS2 HOME 值为axis2解压路径如 I path ja
  • vim常用配置及ideavim插件静音

    更多详细内容见文章 http www shanxing top p 188http www shanxing top p 188 提示音静音 set noerrorbells set visualbell 语法高亮 syntax enabl
  • Linux USB U盘热插拔挂载和卸载

    一 硬件平台 1 控制器 MT7620 A9内核 2 RTC芯片 MCP7940 二 软件平台 1 开发环境 Ubuntu12 04 2 SDK内核包 MT7620 SDK软件开发包 MediaTek ApSoC SDK 4320 2015
  • Ubuntu 18.04 VScode 使用php-debug插件

    1 安装xdebug 安装 php dev apt get install php7 X dev autoconf automake 复制代码 上面的7 X请改成对应的php版本号 不然默认会下载php最新的版本 使用对应的 xdebug
  • python运算符

    算术运算符 以下假设变量 a 10 b 20 加 两个对象相加 a b 输出结果 30 减 得到负数或是一个数减去另一个数 a b 输出结果 10 乘 两个数相乘或是返回一个被重复若干次的字符串 a b 输出结果 200 除 x除以y b
  • python matplotlib数据可视化案例-生成柱状图,饼图(扇形图),词云。

    目前python spark scala十分火爆 于是我就利用爬虫将猎聘上的招聘信息进行了一下获取 相比起来 猎聘上的职位数量还是很多的 3中技术类型以 python spark scala 作为关键词 一共爬取了一万多条信息 爬取的主要信
  • 【告别普通打包】webpack打包结果优化特性:Tree Sharking 和 sideEffects

    文章目录 1 Tree Shaking 摇树 1 1 摇树讲解 1 2 开启 Tree Shaking 1 3 合并模块 扩展 1 4 探讨 babel loader 的问题 2 sideEffects 2 1 sideEffects讲解
  • kotlin语法总结(二)

    上一章地址 kotlin语法总结 一 文章目录 前言 前言 这章接着上一章语法总结继续讲解 主要讲kotlin和java不一样的地方 40 嵌套类 41 数据类 data class 提供toString equals hashCode个性
  • qemu创建linux虚拟机(亲测有效,virt-manger方式)

    1 网桥的搭建 Bridge方式原理 Bridge方式即虚拟网桥的网络连接方式 是客户机和子网里面的机器能够互相通信 可以使虚拟机成为网络中具有独立IP的主机 桥接网络 也叫物理设备共享 被用作把一个物理设备复制到一台虚拟机 网桥多用作高级
  • linux下一个简单的TCP通信程序——客户端向服务端发送任意字符串

    程序目的 服务器端等待客户端连接 若连接成功 则用户可以通过服务器在接受到字符串后进行判断 若不是quit字符串则输出客服端的地址信息 以及接受到的数据 同时将接受到的数据按照原样再发给客服端 若是quit字符串则断开本次连接 问题以及解决
  • 代码点和代码单元

    codePoint和codeUnit 背景 在设计Java时决定采用16位的Unicode字符集 然而16位的Char类型已经不能满足描述所有Unicode字符的需要了 为了解决这个问题 故使用代码点和代码单元 区别 代码点 Code Po
  • C++数据结构X篇_06_C++单向循环链表实现

    本篇参考C 单向循环链表实现整理 先搞懂结构框架 后期根据视频利用c对内容实现 也可以对c有更高的提升 文章目录 1 链表定义 2 链表插入 3 链表打印 注意打印过程是跳过头节点head的 4 实验 单向循环链表与单向链表十分相似 具有关
  • Java 子类继承父类方法的重写(或者覆盖,override)

    1 子类重写父类方法的方法名 参数类型必须与父类被重写 被覆盖 的方法相同 2 子类方法的返回值类型必须小于等于父类被重写的方法的返回值类型 3 子类抛出的异常小于等于父类方法抛出的异常 4 子类的访问权限大于等于父类的访问权限 子类重写了
  • 文心千帆大模型测评分享,效果超出预期

    一 前言 现如今 随着ChatGPT的爆火越来越多的人开始关注人工智能领域了 大家都在尝试使用它来帮助自己在工作上提高效率亦或是解决一些问题 但ChatGPT是有一定的使用门槛的 首先需要我们 科学上网 才能访问 其次GPT4的价格相对来说
  • 2.关于剪枝算法的分类和论文整理

    第二篇 关于剪枝算法的分类 1 非结构化剪枝 1 1 非结构化的weights剪枝 2 结构化剪枝 2 1 Filter Channel Pruning 2 2 Neuron wise pruning 2 3 Group wise Prun
  • Ag-grid属性整理

    import ClickableStatusBarComponent from component clickableStatusBarComponent import HaearCustomComponent from component
  • 数字图像处理之二维码图像提取算法(十)

    这里来说明一下做这次的二维码提取算法用到的函数 最后再给出完整的代码 进行图像的二值化 这里可以使用opencv2里的函数threshold 当然在opencv里也有cvThreshold函数 这个函数可以具体参考 http blog cs
  • 电影院里一个男孩对他女友所做的全过程

    电影院里一个男孩对他女友所做的全过程 周末上电影院看电影 热得不行 提前入场好凉快凉快 坐定 见一对青年男女挽手走了进来 男孩大概二十三四岁模样 肩上挎着他女友的背包 手里拿着一包零食还有可乐 男孩轻声征询女孩究竟坐哪儿合适 女孩没说话 努
  • Hibernate 一对多 多对一 实例 及一些 问题(1)插入及查询

    Clazz java package com wonders task sample bo import java util Set import javax persistence CascadeType import javax per