总结个hibernate联合主键的创建方式,刚看完兵爷的视频,赶紧弄下来。冬爷,赶紧膜拜知道不?我这弄下来是为了明天面试,压力大很知道不?
联合主键,讲一张表中两个属性同时作为主键。
student.java
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.IdClass;
@Entity
@IdClass(value=StudentPK.class)
public class Student {
//@EmbeddedId
//private StudentPK pk;
@Id
private int id;
@Id
private String name;
// public StudentPK getPk() {
// return pk;
// }
// public void setPk(StudentPK pk) {
// this.pk = pk;
// }
private int age;
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;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
还有另外一个类专门设立有关主键的两个变量。
studentPK.java
package com.hibernate.finalmodel;
import java.io.Serializable;
import javax.persistence.Embeddable;
public class StudentPK implements 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;
}
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;
}
public int hashCode() {
return this.name.hashCode();
}
}
这里必须重写equals和hashcode方法。重写hashcode是要定位name属性是否一致,在内存中,hashcode相同的对象线性储存。找到相同的hashcode后,在比较equals,从而得到联合主键的比较结果。
写一个单元测试
TestBase.java
package com.hibernate.finaltest;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.hibernate.finalmodel.Student;
import com.hibernate.finalmodel.StudentPK;
public class TestBase {
private static SessionFactory sessionFactory = null;
Session session;
@BeforeClass
public static void preMethod() {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
// if(session == null)
// session = sessionFactory.openSession();
// else
// session = sessionFactory.getCurrentSession();
}
@AfterClass
public static void postMethod() {
sessionFactory.close();
}
@Test
public void testMethod() {
System.out.println("start create student");
session = sessionFactory.openSession();
// Student s = new Student();
// s.setAge(23);
// s.setName("samuel");
StudentPK pk = new StudentPK();
pk.setId(1);
pk.setName("Andrew");
Student s = new Student();
//s.setPk(pk);
s.setAge(7);
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
session.close();
}
}
[/code
测试成功。就这么多了。明天面试就就扯这个了。
分享到:
相关推荐
### Hibernate联合主键详解 #### 1. 定义联合主键 在Hibernate中定义联合主键主要依赖于`<composite-id>`标签。如示例文件所示,`Users`类被设计为具有联合主键,该主键由`name`和`tel`两个字段组成。在`...
**正文** 在Java持久化框架Hibernate中,联合主键...联合主键提供了一种灵活的方式来处理那些单一主键无法满足需求的复杂业务场景。在实际项目中,正确理解和使用联合主键对于优化数据模型和保证数据完整性至关重要。
在 Hibernate 中,联合主键(Composite Key)是指由两个或多个属性共同构成的主键,这种主键在数据库设计中常见于需要多个字段唯一标识一条记录的情况。在 Hibernate 中设置联合主键通常需要以下几个步骤: 1. **...
在Hibernate中,有三种主要的注解方式来映射联合主键,以下是对这三种方式的详细解释: 1. **使用`@Embeddable`和`@Id`** 在这种映射方式中,联合主键的字段被放在一个单独的类中,这个类需要实现`java.io....
《Hibernate复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...
总结来说,联合主键在Hibernate中可以通过注解灵活地进行定义,根据项目需求选择合适的方式。使用注解的方式使得代码更加简洁,更易于理解和维护。在处理复杂的数据关系时,联合主键提供了更强大的灵活性。无论选择...
复合主键映射 <br>通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射
在某些情况下,单一字段无法唯一标识表中的记录,此时需要多个字段联合起来作为主键。例如,考虑一个学生选课表,可能包含"学生ID"和"课程ID",这两者结合才能唯一确定学生选修的特定课程。 三、Hibernate中复合...
这种方式不仅简化了联合主键的实现过程,还提高了代码的可读性和维护性。对于需要使用联合主键的场景来说,这是一种非常实用的方法。在实际开发中,还可以根据具体需求调整复合主键类的属性数量以及类型,以适应不同...
通过这种方式,Hibernate能够正确地理解和管理使用联合主键的关系型数据。在处理复杂的数据结构时,联合主键提供了一种灵活的方式,使得实体间的关联更加自然和直观。在开发过程中,理解并熟练运用联合主键可以提高...
同时,Hibernate的Criteria API或HQL(Hibernate Query Language)可以帮助进行复杂的数据库查询,包括涉及多表连接的查询,这些查询可能涉及到联合主键和外键的使用。 综上所述,SSH2+JSON的结合提供了强大的后端...
- 联合主键是多个字段共同构成的主键,可以通过@EmbeddedId和@Embeddable注解实现。 - 复合主键是自动生成的主键,通过@TableGenerator或@IdClass实现。 **8. 异常处理** - Hibernate提供了自己的异常体系,如...
第1课 课程内容 6 第2课 Hibernate UML图 6 第3课 风格 7 第4课 资源 7 第5课 环境准备 7 ...三、 联合主键 24 1、xml方式 24 2、annotation方式 27 第14课 Hibernate核心开发接口(重点) 29 ........
10. **多对一、一对多、多对多关联映射**: Hibernate支持各种复杂的关联关系,如实体间的关联映射配置,如外键、联合主键等。 综上,这份压缩包提供的文档涵盖了Hibernate的基本使用到高级特性,结合SQL参考手册,...
Hibernate是一款开源的对象关系映射(ORM)框架,它允许Java开发者在Java对象和数据库记录之间建立映射,从而简化数据库操作。Hibernate 3.1.2是该框架的一个较早版本,但其核心概念和机制对于理解现代Hibernate版本...
Hibernate支持多种主键策略,如自动增长、序列或联合主键。 5. **持久化类(Persistent Class)**:持久化类是指被Hibernate管理的类,它们可以通过Session接口进行CRUD(创建、读取、更新、删除)操作。 6. **...
11. **联合主键**:当一个表的主键由两个或更多列组成时,需要使用联合主键来映射。 12. **继承映射**:Hibernate支持单表继承、联合继承和表格-per-class继承策略,学习者应了解每种策略的适用场景。 通过本教程...
9. **一对多、多对一、一对一关联映射**:掌握不同类型的关联映射配置,如List、Set、Map等集合类型的映射,以及联合主键的处理。 10. **延迟加载与立即加载**:理解Hibernate的懒加载和Eager加载策略,以及如何在...
通过解析这个文件,Hibernate能建立起与数据库的连接,并了解如何映射Java类到数据库表。 3. **实体类(Entity)与映射文件(Hibernate Mapping File, HBM)**:在Hibernate中,每个数据库表通常对应一个Java类,...