通过组件来实现组合主键的步骤:
1、 编写组合主键的类,该类必须实现Serializable接口、生成对应的get/set方法;最好实现equals和hashCode方法
1 public class ScoreId implements Serializable{
2 private int stuId;//学生编号
3 private int subjectId;//科目编号
4 public int getStuId() {
5 return stuId;
6 }
7 public void setStuId(int stuId) {
8 this.stuId = stuId;
9 }
10 public int getSubjectId() {
11 return subjectId;
12 }
13 public void setSubjectId(int subjectId) {
14 this.subjectId = subjectId;
15 }
16 }
2、在主类中引用对应组件
1 /**
2 * 成绩
3 * */
4 public class Score {
5 private ScoreId scoreId;
6 private double result;//成绩
7
8 public ScoreId getScoreId() {
9 return scoreId;
10 }
11 public void setScoreId(ScoreId scoreId) {
12 this.scoreId = scoreId;
13 }
14 public double getResult() {
15 return result;
16 }
17 public void setResult(double result) {
18 this.result = result;
19 }
20 }
3、映射文件的编写
1 <hibernate-mapping package="cn.siggy.pojo">
2 <class name="Score">
3 <composite-id name="scoreId" class="ScoreId">
4 <key-property name="stuId"></key-property>
5 <key-property name="subjectId"></key-property>
6 </composite-id>
7 <property name="result"/>
8 </class>
9 </hibernate-mapping>
4、测试代码
1 @Test
2 public void testSave() throws HibernateException{
3 Session session = null;
4 Transaction tx = null;
5 try{
6 session = HibernateUtil.getSession();
7 tx = session.beginTransaction();
8
9 Score s = new Score();
10 ScoreId sid = new ScoreId();
11 sid.setStuId(2);
12 sid.setSubjectId(6);
13 s.setResult(89);
14 s.setScoreId(sid);
15
16 session.save(s);
17
18 tx.commit();
19
20 }catch (HibernateException e) {
21 if(tx!=null)
22 tx.rollback();
23 e.printStackTrace();
24 throw e;
25 }finally{
26 HibernateUtil.closeSession();
27 }
28 }