zoukankan      html  css  js  c++  java
  • Hibernate xml配置方法之联合主键

    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();
     }
    }
  • 相关阅读:
    获取指定包下所有自定义注解
    Java中的24种设计模式与7大原则
    学习 Spring Boot:(二十九)Spring Boot Junit 单元测试
    学习Spring Boot:(二十八)Spring Security 权限认证
    学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator
    学习Spring Boot:(二十六)使用 RabbitMQ 消息队列
    学习Spring Boot:(二十五)使用 Redis 实现数据缓存
    学习Spring Boot:(二十四)多数据源配置与使用
    学习Spring Boot:(二十三)Spring Boot 中使用 Docker
    学习Spring Boot:(二十二)使用 AOP
  • 原文地址:https://www.cnblogs.com/520playboy/p/6512606.html
Copyright © 2011-2022 走看看