一、什么是复合主键?
- 一张表的主键是由多个字段组成,这个主键就被称为复合主键。 主键是唯一确定某条记录的字段,比如公民的身份证号就是一个主键,因为由身份证号这个主键就可以确定
- 某个公民。 有一种情况,比如学生成绩这张表中,一个学号无法唯一确定这个学生的成绩,因为这个学生有多科成绩,这时候“学号+学科”才是主键,两者结合才能唯一确定一条记录,也就是成绩。
二、hibernate生成含有复合主键表的映射bean
2.1 创建有复合主键的表
这张表有复合主键
2.2 生成映射文件
Hibernate 对含有复合主键的表生成bean的时候会把复合主键作为单独的bean独立生成。
2.3 分析Score和ScoreId bean
2.4 分析总映射文件
三、对有符合主键的bean进行增删改查操作
案例一 Test_CompositeId.java
package action; import java.io.Serializable; import org.hibernate.Session; import org.hibernate.Transaction; import bean.Score; import bean.ScoreId; import util.HibernateUtil; public class Test_CompositeId { public static void main(String[] args) { // Test_CompositeId.select(); // Test_CompositeId.save(); Test_CompositeId.update(); } /** * 查找 */ private static void select() { Session session = null; Transaction tran = null; ScoreId id = new ScoreId(); id.setUserid(1); id.setSubject("语文"); try { session = HibernateUtil.getSessionFactory().getCurrentSession(); tran = session.beginTransaction(); Score score = (Score) session.get(Score.class, id); System.out.println("成绩=" + score.getScore()); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } } private static void save() { Session session = null; Transaction tran = null; ScoreId id = new ScoreId(); id.setSubject("英语"); id.setUserid(1); Score score = new Score(); score.setId(id); score.setScore(100); try { session = HibernateUtil.getSessionFactory().getCurrentSession(); tran = session.beginTransaction(); Serializable primarykey = session.save(score); System.out.println(primarykey); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } } /** * 执行更新操作 */ private static void update() { Session session = null; Transaction tran = null; ScoreId id=new ScoreId(); id.setUserid(1); id.setSubject("英语"); Score score=new Score(); score.setId(id); score.setScore(12); try { session = HibernateUtil.getSessionFactory().getCurrentSession(); tran = session.beginTransaction(); session.update(score); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } } }
所有代码在这里 : 链接