1、StudentPK类,存放Student的联合主键,必须实现java.io.Serializable接口(为了序列化扩充移植),必须重写equals跟hashCode方法(为了确保唯一性)

public class StudentPK implements java.io.Serializable{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @Override
public boolean equals(Object o) {
if(o instanceof StudentPK) {
StudentPK pk = (StudentPK)o;
if(this.id == pk.getId() && this.name.equals(pk.getName())) {
return true;
}
}
return false;
} @Override
public int hashCode() {
return this.name.hashCode();
}
}
package com.bjsxt.hibernate; public class Student { private StudentPK pk; private int age;
private String sex;
private boolean good;
public boolean isGood() {
return good;
}
public void setGood(boolean good) {
this.good = good;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public StudentPK getPk() {
return pk;
}
public void setPk(StudentPK pk) {
this.pk = pk;
}
}

2、Student.hbm.xml:

<hibernate-mapping>
<class name="com.bjsxt.hibernate.Student">
<composite-id name="pk" class="com.bjsxt.hibernate.StudentPK">
<key-property name="id"></key-property>
<key-property name="name"></key-property>
</composite-id> <property name="age" />
<property name="sex" />
<property name="good" type="yes_no"></property>
</class> </hibernate-mapping>

测试文件:

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; public class HibernateIDTest {
private static SessionFactory sessionFactory; @BeforeClass
public static void beforeClass() {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
@AfterClass
public static void afterClass() {
sessionFactory.close();
} @Test
public void testStudentSave() {
StudentPK pk = new StudentPK();
pk.setId(5);
pk.setName("zhangsan5");
Student s = new Student();
s.setPk(pk);
s.setAge(8); Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
} @Test
public void testTeacherSave() { Teacher t = new Teacher();
t.setId(5);
t.setName("t5");
t.setTitle("middle5");
t.setBirthDate(new Date()); Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(t);
session.getTransaction().commit();
} public static void main(String[] args) {
beforeClass();
}
}

最新文章

  1. 使用mybatis-generator在自动生成Model类和Mapper文件
  2. ECharts使用心得总结(二)
  3. [Android Memory] Android Zipalign zip对齐优化app程序
  4. json和string 之间的相互转换
  5. 配置文件App.config的使用以及Readonly与Const的对比
  6. 常见的PC端和移动端表单组件
  7. Hide Xcode8 strange log.
  8. 使用JS动态创建含有1000行的表格
  9. Nginx和Apache共存环境下apache获得真实IP
  10. JS 引用
  11. vs 2010 引用DLL 遇到问题
  12. cocos2d-x 实现跨平台的目录遍历
  13. C#与SQl数据的对应关系(tinyint、smallint、int、bigint)
  14. 关于JAVA实现二维码以及添加二维码LOGO
  15. vue+typescript基础练习
  16. python函数默认参数陷阱
  17. module &#39;sign.views&#39; has no attribute &#39;search_name&#39;
  18. mac中安装 RabbitMQ
  19. eclipse配置servlet错误
  20. SharePoint CAML Query小结

热门文章

  1. springMVC + hadoop + httpclient 文件上传请求直接写入hdfs
  2. mysql优化之参数优化
  3. Python练习笔记——斐波那契数列
  4. [android] 网络断开的监听
  5. fcntl函数用法详解
  6. Python max() 函数
  7. C# GridView 给某行或某列绑定点击事件和鼠标事件
  8. 分享Memcached shell启动停止脚本
  9. HDU--Elevator(水题)
  10. 从jar包中读取资源