复合(联合)主键映射 通常将复合主键相关的属性,单独放到一个类中 * 此类必须实现序列化接口 implements java.io.Serializable * 覆写hashcode和equals方法 类: import java.io.Serializable; public classNamePK implements Serializable{ //主键类 private static final long serialVersionUID = 8313037022835155821L; private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } //重写,交给eclipse自己来写,source/generator hashCode() and equals() public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + ((firstName == null) ? 0 : firstName.hashCode()); result = PRIME * result + ((lastName == null) ? 0 : lastName.hashCode()); return result; } //重写,交给eclipse自己来写 public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final NamePK other = (NamePK) obj; if (firstName == null) { if (other.firstName != null) return false; } else if (!firstName.equals(other.firstName)) return false; if (lastName == null) { if (other.lastName != null) return false; } else if (!lastName.equals(other.lastName)) return false; return true; } } public classUserInfo{ privateNamePK namePk; private String sex; private int age; } hbm.xml UserInfo.hbm.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.zd.model"> <class name="UserInfo" table="user_info" > <composite-id name="namePk"> <key-property name="firstName" column="first_name" length="12"/> <key-property name="lastName" column="last_name" length="12"/> </composite-id> <property name="sex" length="12"/> <property name="age" /> </class> </hibernate-mapping> 测试用例: public void testCompositeId(){ Session session = null; Transaction ta = null; try{ session = HibernateUtil.getSession(); ta = session.beginTransaction(); NamePK namePk = new NamePK(); namePk.setFirstName("Zhang"); namePk.setLastName("san"); UserInfo ui = new UserInfo(); ui.setNamePk(namePk); ui.setSex("M"); ui.setAge(12); session.save(ui); ta.commit(); }catch(Exception e){ e.printStackTrace(); if(ta != null){ ta.rollback(); } }finally{ //关闭session, user变为detached离线对象 HibernateUtil.closeSession(session); } } public void testgetId(){ Session session = null; Transaction ta = null; try{ session = HibernateUtil.getSession(); ta = session.beginTransaction(); NamePK namePk = new NamePK(); namePk.setFirstName("Zhang"); namePk.setLastName("san"); UserInfo ui = (UserInfo) session.get(UserInfo.class, namePk); //get or load均是要序列化的类,所以要把主键implements Serializable System.out.println(ui.getAge()); System.out.println(ui.getSex()); ta.commit(); }catch(Exception e){ e.printStackTrace(); if(ta != null){ ta.rollback(); } }finally{ //关闭session, user变为detached离线对象 HibernateUtil.closeSession(session); } }
rnate 联合主键应用及配置用xml方式实现
猜你喜欢
转载自zwfwgood.iteye.com/blog/1479658
今日推荐
周排行