当前位置: 首页 > news >正文

hibernate--联合主键--XML

xml:composite-id

要重写equals,hashCode方法, 还要序列化

 

1. 新建一个主键类: StudentPK.java, 注意需要序列化.还要重写equals和hashCode: 

package com.bjsxt.hibernate;

public class StudentPK implements java.io.Serializable{
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public boolean equals(Object o){
		if(o instanceof StudentPK){
			StudentPK pk=(StudentPK)o;
			if(this.id==pk.getId()&&this.name.equals(pk.getName())){
				return true;
			}
		}
		return false;
	}
	@Override
	public int hashCode(){
		return this.name.hashCode();
	}
}

  

   

2. 删掉Student.java里的id和name的set和get方法, 新建一个主键对象及setter和getter:     

package com.bjsxt.hibernate;

public class Student {
	private StudentPK pk;
	private int age;
	public StudentPK getPk() {
		return pk;
	}
	public void setPk(StudentPK pk) {
		this.pk = pk;
	}
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

3. junit的测试方法改成:

@Test
	public void testStudentSave() {
		StudentPK pk=new StudentPK();
		pk.setId(1);
		pk.setName("zhangsan");
		Student s =new Student();
		s.setPk(pk);		
		s.setAge(23);
		
		Session session =  sf.openSession();
		session.beginTransaction();
		session.save(s);
		session.getTransaction().commit();
		session.close();	
	}

  

4. Student.hbm.xml改成:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjsxt.hibernate">
    <class name="Student" table="_student">
        <!-- <id name="id">
        	<generator class="native"></generator>
        </id>
        <property name="name"/> -->
        <composite-id name="pk" class="com.bjsxt.hibernate.StudentPK">
        	<key-property name="id"></key-property>
        	<key-property name="name"></key-property>
        </composite-id>
        
        <property name="age"/>
    </class>
</hibernate-mapping>

  

转载于:https://www.cnblogs.com/wujixing/p/5413607.html

相关文章:

  • 动态素组(ArrayList)
  • cssReset - css初始化
  • KeyMob移动广告聚合平台 开发者赚钱平台
  • Lua非常有用的工具——递归打印表数据
  • C风格字符串
  • UVa 10924-Prime Words
  • linux Shell编程
  • Vue--数据传输
  • CentOS 6.4 yum快速搭建Zabbix 2.2版本(中文)
  • python excel 转 csv
  • Android自定义控件实现简单的轮播图控件
  • 2016.04.22-2016.04.28这周工作时间和内容
  • Python 主要模块和常用方法简览
  • IBM在云计算中推动了Swift并使用了Swift的运行环境、包目录和其更多属性
  • ToughRADIUS 安装配置指导(视频教程)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • C++入门教程(10):for 语句
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • create-react-app做的留言板
  • ERLANG 网工修炼笔记 ---- UDP
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python_网络编程
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于遗传算法的优化问题求解
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序01:wepy框架整合iview webapp UI
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​Spring Boot 分片上传文件
  • #NOIP 2014# day.2 T2 寻找道路
  • (2020)Java后端开发----(面试题和笔试题)
  • (6)添加vue-cookie
  • (js)循环条件满足时终止循环
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (第61天)多租户架构(CDB/PDB)
  • (第一天)包装对象、作用域、创建对象
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十一)c52学习之旅-动态数码管
  • (转)jdk与jre的区别
  • ./configure,make,make install的作用
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .bat批处理(一):@echo off
  • .NET 解决重复提交问题
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • ?
  • ??在JSP中,java和JavaScript如何交互?
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解