//1. 复合主键类
public class CompositeKeys implements Serializable{
private StringuserName;
private String address;
// .. get/set
}
2.用户实体类
public class User {
// 名字跟地址,不会重复
private CompositeKeyskeys;
private int age;
}
3.实体类的配置文件User.hbm.xml
<?xmlversion="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 package="cn.itcast.d_compositeKey"auto-import="true">
<classname="User">
<!-- 复合主键映射 -->
<composite-idname="keys">
<key-propertyname="userName"type="string"></key-property>
<key-propertyname="address"type="string"></key-property>
</composite-id>
<propertyname="age"type="int"></property>
</class>
</hibernate-mapping>
4.测试类App.java
public class App2 {
private static SessionFactory sf;
static {
// 创建sf对象
sf = new Configuration()
.configure()
.addClass(User.class) //(测试)会自动加载映射文件:Employee.hbm.xml
.buildSessionFactory();
}
//1. 保存对象
@Test
public void testSave() throws Exception {
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
// 对象
CompositeKeys keys = new CompositeKeys();
keys.setAddress("广州棠东");
keys.setUserName("Jack");
User user = new User();
user.setAge(20);
user.setKeys(keys);
// 保存
session.save(user);
tx.commit();
session.close();
}
@Test
public void testGet() throws Exception {
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
//构建主键再查询
CompositeKeys keys = new CompositeKeys();
keys.setAddress("广州棠东");
keys.setUserName("Jack");
// 主键查询
User user = (User) session.get(User.class, keys);
// 测试输出
if (user !=null){
System.out.println(user.getKeys().getUserName());
System.out.println(user.getKeys().getAddress());
System.out.println(user.getAge());
}
tx.commit();
session.close();
}
}