`

Hibernate配置复合主键 composite primary key (二)

阅读更多
摘自圣思园Hibernate 26.组件映射深度解析

上一篇讲了如何通过配置Student实现Serializable接口来实现复合主键查询。
http://alleni123.iteye.com/admin/blogs/1981608


这里要讲一下如何通过组件来完成同样的功能。

先新建一个StudentPrimaryKey.java
package composite_primary;

import java.io.Serializable;

public class StudentPrimarykey implements Serializable
{
	private String cardId;
	private String name;
	

	@Override
	public int hashCode()
	{
		...
	}
	@Override
	public boolean equals(Object obj)
	{
		...
	}
	
	
}


也就是把之前的Student类的cardId和name放到了这里,并在这个类中重载了这两个元素的hashCode和equals方法。
然后再把Student.java改一下:

public class Student 
{	 
	private StudentPrimarykey pri;
	
	private int age;
}


最后是Student.hbm.xml

<hibernate-mapping package="composite_primary">
	<class name="Student" table="test_student">
	
	<!-- composite-id表示复合主键 -->
	<!-- name表示Student类中用于表示联合主键的元素的名字 -->
	<composite-id name="pri" class="StudentPrimarykey">
		<!-- key-property表示组成主键的元素 -->
		<key-property name="cardId" column="card_id" type="string"/>
		<key-property name="name" column="name" type="string"/>
		
	</composite-id>
	 
	 
	 <property name="age" column="age" type="int"/>
	 
	  
	</class>



</hibernate-mapping>


最后执行configure(),生成SQL语句:

create table test_student (card_id varchar2(255 char) not null, name varchar2(255 char) not null, age number(10,0), primary key (card_id, name));

和上一篇的SQL语句时完全一样的。



插入

Session session=HibernateUtil.openSession();
		
  		 
 		Transaction tx=session.beginTransaction();
 		
 		StudentPrimarykey key1=new StudentPrimarykey("111", "alleni");
 		
 		Student s1=new Student();
 		s1.setPri(key1);
 		s1.setAge(22);
 		
 		
 		StudentPrimarykey key2=new StudentPrimarykey("222", "eline");
 		Student s2=new Student();
 		s2.setPri(key2);
 		s2.setAge(33);
 		
 
		session.save(s1);
		session.save(s2);
		
		tx.commit();



查询

		Session session=HibernateUtil.openSession();
		
		
		StudentPrimarykey key1=new StudentPrimarykey("111", "alleni");
		
		
		
		
		Student s=(Student) session.get(Student.class,key1);
		
		System.out.println(s.getAge()); //22



分享到:
评论

相关推荐

    hibernate 体系结构与配置 参考文档(html)

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对...

    Hibernate 中文 html 帮助文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一...

    最全Hibernate 参考文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (optional) 5.1.9. property 5.1.10. 多对一...

    Hibernate教程

    触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. 多...

    Hibernate3的帮助文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. 多...

    hibernate3.04中文文档.chm

    触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. ...

    Hibernate3+中文参考文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (optional) 5.1.9. property 5.1.10. 多对一...

    hibernate 框架详解

    触发器实现的主键生成器(Primary keys assigned by triggers) 6.1.5. composite-id 6.1.6. 鉴别器(discriminator) 6.1.7. 版本(version)(可选) 6.1.8. timestamp (optional) 6.1.9. property 6.1.10. ...

    Hibernate Reference Documentation3.1

    Table of Contents Preface 1. Introduction to Hibernate ... Many-to-many with shared composite key attribute 23.4.4. Content based discrimination 23.4.5. Associations on alternate keys 24. Best Practices

    Hibernate参考文档

    触发器实现的主键生成器(Primary keys assigned by triggers) 5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一...

    jpa-hibernate-tutorials:带有Spring Boot和Spring-Data-JPA的Hibernate教程

    Spring Boot和JPA的Hibernate教程和演示

Global site tag (gtag.js) - Google Analytics