`

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 无主键表映射

    在无主键表映射的情况下,数据库中的表应该没有明确的`PRIMARY KEY`约束,而是依赖于复合主键字段的唯一性。例如: ```sql CREATE TABLE Orders ( customerId VARCHAR(255) NOT NULL, orderId VARCHAR(255) NOT ...

    hibernate联合主键全攻略

    联合主键(Composite Primary Key),是指在数据库表中使用两个或多个字段共同作为主键来唯一标识每一行记录。这种方式在实际应用中非常常见,尤其是在需要通过多维度数据来确定唯一性的场景下。 ### Hibernate联合...

    hibernate基础 入门/ hibernate basic

    6. **Composite Primary Key**:复合主键,用于标识表中的记录,当单一字段不足以唯一标识一条记录时使用。 **SessionFactory的作用**: - **创建Session实例**:SessionFactory负责创建Session实例,并管理这些...

    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. 多对一...

    jPA+hibernate

    **联合主键(Composite Primary Key)**在JPA中,当一个实体的主键由两个或更多个字段组成时,我们称之为联合主键。`JPACompositePK`示例将说明如何使用`@Embeddable`和`@EmbeddedId`注解来定义这样的主键。 在这些...

    最全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. 多...

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

    **六、复合主键(Composite Primary Key)** 当一个实体的主键由两个或更多个属性组成时,可以使用@EmbeddedId和@Embeddable注解定义复合主键。 **七、Element Collection** Element Collection用于将非实体类型的...

    eib3.0中的注解

    复合主键 (Composite Primary Key) - **定义**:当需要使用多个属性变量(表中的多列)联合起来作为主键时,就需要使用复合主键。复合主键要求开发者自定义一个复合主键类。 - **示例**: ```java @Embeddable ...

    实用JPA开发指南----jpa核心技术(关联关系等的配置高级配置)

    4. **复合主键(Composite Primary Keys)**: 当一个实体的主键由两个或更多字段组成时,可以使用`@IdClass`或`@EmbeddedId`注解来定义复合主键。 5. **双向关联(Bidirectional Relationships)**: 在两个实体之间...

    EJB 注释精解(pdf版)

    复合主键(Composite Primary Key) 复合主键是指使用多个属性变量(表中的多列)联合起来作为主键。为了实现复合主键,需要编写一个复合主键类(CompositePrimaryKeyClass),并遵循以下规则: - **复合主键类...

    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. 多对一...

    EJB3_JPA文档

    2. 联合主键(Composite Primary Key) 对于需要多个字段共同作为主键的情况,JPA提供了@Embeddable和@EmbeddedId注解来定义复合主键类。 3. 链接查询(Association Queries) JPA允许在查询中直接引用实体的关联...

    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 全面学习资料

    - **复合主键(Composite Key)**: 当主键由多个字段组成时的处理。 - ** Criteria 查询**: 动态构建查询的API,提供更多灵活性。 **6. JPA实战** 实战部分通常包含实际项目中的应用案例,如: - **Spring Boot + ...

Global site tag (gtag.js) - Google Analytics