• 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();
     }
    }
  • 相关阅读:
    configure: error: no acceptable cc found in $PATH
    SQL server的错误日志导致服务器C盘满
    域名/IP 正则表达式
    rpm 基本命令
    VB TO C#
    yum 的基本操作
    在服务器上怎么检查一个网站的在线连接数有多大。
    MSSQL2005不能连接远程有非法字符密码的数据库
    按账目类型和日期查看账目
    梦断代码读书笔记(二)
  • 原文地址:https://www.cnblogs.com/520playboy/p/6512606.html
Copyright © 2020-2023  润新知