zoukankan      html  css  js  c++  java
  • hibernate--联合主键--XML

    xml:composite-id

    要重写equals,hashCode方法, 还要序列化

    1. 新建一个主键类: StudentPK.java, 注意需要序列化.还要重写equals和hashCode: 

    package com.bjsxt.hibernate;
    
    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();
    	}
    }
    

      

       

    2. 删掉Student.java里的id和name的set和get方法, 新建一个主键对象及setter和getter:     

    package com.bjsxt.hibernate;
    
    public class Student {
    	private StudentPK pk;
    	private int age;
    	public StudentPK getPk() {
    		return pk;
    	}
    	public void setPk(StudentPK pk) {
    		this.pk = pk;
    	}
    	
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    }
    

    3. junit的测试方法改成:

    @Test
    	public void testStudentSave() {
    		StudentPK pk=new StudentPK();
    		pk.setId(1);
    		pk.setName("zhangsan");
    		Student s =new Student();
    		s.setPk(pk);		
    		s.setAge(23);
    		
    		Session session =  sf.openSession();
    		session.beginTransaction();
    		session.save(s);
    		session.getTransaction().commit();
    		session.close();	
    	}
    

      

    4. Student.hbm.xml改成:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.bjsxt.hibernate">
        <class name="Student" table="_student">
            <!-- <id name="id">
            	<generator class="native"></generator>
            </id>
            <property name="name"/> -->
            <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"/>
        </class>
    </hibernate-mapping>
    

      

  • 相关阅读:
    Java后端工程师的学习技术栈
    ltp 分析 fail testcase
    程序员这个职业需要具备的素养
    你真的愿意到了50岁还要做编程吗?
    程序员的学习和积累
    程序员写博客的缘由
    VS2010生成文件
    从菜鸟到专家的五步编程语言学习法
    程序设计的18大原则
    怎样的代码才算是干净的代码?
  • 原文地址:https://www.cnblogs.com/wujixing/p/5413607.html
Copyright © 2011-2022 走看看