组合主键映射
通过组件来实现组合主键的步骤:
1、 编写组合主键的类,该类必须实现Serializable接口
生成对应的get/set方法;最好实现equals和hashCode方法
publicclass ScoreId implements Serializable{ privateintstuId;//学生编号 privateintsubjectId;//科目编号 publicint getStuId() { returnstuId; } publicvoid setStuId(int stuId) { this.stuId = stuId; } publicint getSubjectId() { returnsubjectId; } publicvoid setSubjectId(int subjectId) { this.subjectId = subjectId; } } |
2、 在主类中引用对应组件
/** * 成绩 * */ publicclass Score { private ScoreId scoreId; privatedoubleresult;//成绩
public ScoreId getScoreId() { returnscoreId; } publicvoid setScoreId(ScoreId scoreId) { this.scoreId = scoreId; } publicdouble getResult() { returnresult; } publicvoid setResult(double result) { this.result = result; } } |
3、 映射文件的编写
<hibernate-mapping package="cn.siggy.pojo"> <class name="Score"> <composite-id name="scoreId" class="ScoreId"> <key-property name="stuId"></key-property> <key-property name="subjectId"></key-property> </composite-id> <property name="result"/> </class> </hibernate-mapping> |
4、 测试代码
@Test publicvoid testSave() throws HibernateException{ Session session = null; Transaction tx = null; try{ session = HibernateUtil.getSession(); tx = session.beginTransaction();
Score s = new Score(); ScoreId sid = new ScoreId(); sid.setStuId(2); sid.setSubjectId(6); s.setResult(89); s.setScoreId(sid);
session.save(s);
tx.commit();
}catch (HibernateException e) { if(tx!=null) tx.rollback(); e.printStackTrace(); throw e; }finally{ HibernateUtil.closeSession(); } } |