Hibernate的ID联合主键——Hibernate学习笔记04
来源:互联网 发布:e-r数据库设计 编辑:程序博客网 时间:2024/06/08 02:08
之前写了id的生成策略,但有时候我们的数据库表的主键并不是唯一的一个属性,这就要用到联合主键,配置方法呢同样有两个,xml和annotation。当然我们在设计数据库表的时候尽量不要去这么设计,但是要是遇到了这种情况,要学会配置。
还是先来看项目
对于Student,我们认为age和id作为联合主键,那么新建一个Student_pk.java里面有age 和int 属性还有get方法。
package com.tfj.hibernate;import java.io.Serializable;public class Student_pk implements Serializable{private int id;private int age;public int getId() {return id;}public int getAge() {return age;}public void setId(int id) {this.id = id;}public void setAge(int age) {this.age = age;}@Overridepublic int hashCode() {return super.hashCode();}@Overridepublic boolean equals(Object obj) {if(obj instanceof Student_pk){Student_pk pk= (Student_pk)obj;if(this.id==pk.getId()&&this.age==pk.getAge()){return true;}}return false;}}
在Student.hbm.xml里有<composite-id>来配置主键<key-property>来指定是哪个属性。
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.tfj.hibernate.Student" table="student"><composite-id name="pk" class="com.tfj.hibernate.Student_pk"><key-property name="age"></key-property><key-property name="id"></key-property></composite-id><property name="name"></property><property name="sex"></property><property name="good"></property></class></hibernate-mapping>
在测试的时候要新建一个主键(Studen_pk.java)
@Testpublic void testTeacherSave() {Teacher t = new Teacher();Teacher_pk pk = new Teacher_pk();pk.setId(5);pk.setName("hello");t.setPk(pk);t.setTitle("高级");t.setYourWifeName("春娇");t.setBirthDate(new Date());Session session = sessionFactory.getCurrentSession();session.beginTransaction();session.save(t);session.getTransaction().commit();}
这里在Student_pk.java里实现了 Serializable接口,实现了序列化。目的是可以方便对象的读取和写入,比如磁盘中。
还要实现equal()和hashcode()方法。
equal()方法当id和age都一样的时候就是相同的。
下面说annotation
annotation要实现这个有3种方法,我看的文档没有给出翻译。(现在我们用Teacher和Teacher_pk来说)是这样如下三种
1)把主键类(Teacher_pk)注册为@ Embeddable,把主键属性(在Teacher里的pk)注册为@Id;
2)把组件的属性注册为@EmbeddeId;
3)把类注解为@IdClass把属于主键的属性注解为@Id;
对于第三种和第二种用的多,关于为什么要有@IdClass,虽然我们在存的时候没有用到这个类,但是在读取的时候还是会用到,所以这个类应该存在。
- Hibernate的ID联合主键——Hibernate学习笔记04
- Hibernate学习笔记(三)----ID生成策略、联合主键
- Hibernate之ID生成策略—联合主键
- hibernate 联合主键 composite-id
- hibernate ID联合生成主键
- hibernate ID联合生成主键
- hibernate 联合主键 composite-id
- hibernate 联合主键 composite-id
- Hibernate学习篇04——联合主键(一)
- hibernate学习:联合主键
- 《Hibernate学习笔记三》:联合主键的映射
- 《Hibernate学习笔记七》一对一联合主键的关联
- 《Hibernate学习笔记三》:联合主键的映射
- 《Hibernate学习笔记七》一对一联合主键的关联
- Hibernate的联合主键
- hibernate的联合主键
- hibernate的联合主键
- Hibernate的ID生成策略/联合主键解决方案
- Struts2——(2)配置文件、通配符
- 示波器的使用
- 有关Activity生命周期的讨论
- java多态 我的理解
- 海量数据相似度计算之simhash和海明距离
- Hibernate的ID联合主键——Hibernate学习笔记04
- 示波器的使用2
- highcharts 绘制 柱状图
- scons简介
- poj 3126 (最短路)
- IOS 深入学习(31)之About Drawing and Printing in iOS(绘图和打印)
- hdu 2544 最短路
- GNURadio教程链接汇总
- bezier