Hibernate配置复合主键 composite primary key (二)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Hibernate配置复合主键 composite primary key (二)

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

 2013/11/27 18:36:53  alleni123  程序员俱乐部  我要评论(0)
  • 摘要:摘自圣思园Hibernate26.组件映射深度解析上一篇讲了如何通过配置Student实现Serializable接口来实现复合主键查询。http://alleni123.iteye.com/admin/blogs/1981608这里要讲一下如何通过组件来完成同样的功能。先新建一个StudentPrimaryKey.javapackagecomposite_primary;importjava.io.Serializable
  • 标签:KEY 配置 主键 hibernate
摘自圣思园Hibernate 26.组件映射深度解析

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


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

先新建一个StudentPrimaryKey.java
class="java" name="code">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



发表评论
用户名: 匿名