1.联合主键的映射规则
1) 类中的每个主键属性都对应到数据表中的每个主键列。
Hibernate要求具有联合主键的实体类实现Serializable接口,并且重写hashCode与equals方法,重写这两个方法的原因在于Hibernate要根据数据库的联合主键来判断某两行记录是否是一样的,如果一样那么就认为是同一个对象,如果不一样,那么就认为是不同的对象。这反映到程序领域中就是根据hashCode与equals方法来判断某两个对象是否能够放到诸如Set这样的集合当中。联合主键的实体类实现Serializable接口的原因在于使用get或load方法的时候需要先构建出来该实体的对象,并且将查询依据(联合主键)设置进去,然后作为get或load方法的第二个参数传进去即可。
2) 将主键所对应属性提取出一个类(称之为主键类),并且主键类需要实现Serializable接口,重写equals方法与hashCode方法,原因与上面一样。
以Student类为例,实现上述两种映射联合主键的配置:
2.Student中的两个属性作为联合主键属性
Student类:
- public class Student implements Serializable {//必须要实现Serializable接口
- private String cardID;//cardID和name映射为联合主键
- private String name;
- private int age;
- //get、set、hashCode、equals方法省略
- }
注:可使用MyEclipse中的Sourse-->Gennerate hashCode and equals来使用MyEclipse快速生成hashCode和equals方法
Student.hbm.xml配置:
- <class name="bean.Student" table="student">
- <composite-id><!--联合主键,student表中的主键为(student_name,card_id)-->
- <key-property name="name" column="student_name" type="string"></key-property><!--name及cardID为Student类中的属性-->
- <key-property name="cardID" column="card_id" type="string"></key-property>
- </composite-id>
- <property name="age" column="student_age" type="int"></property>
- </class>
保存对象:
- tx=session.beginTransaction();
- Student s1=new Student();
- s1.setName("lisi");
- s1.setAge(22);
- s1.setCardID("711");
- System.out.println(s1);
- session.save(s1);
- tx.commit();
注意:主键为(card_id,student_id)若连续执行上述的保存语句两次,当然会抛异常,应为主键重复:
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
3.将Student类中的两个主键属性提取为一个新的类PrimaryKey,即主键类
主键类PrimaryKey:
- public class PrimaryKey implements Serializable{
- private String cardID;
- private String name;
- //get、set、hashCode、equals方法省略
- }
Student类中含有PrimaryKey类型的属性及对应set、get方法:
- public class Student {
- private int age;
- private PrimaryKey primaryKey;
- //set、get方法省略
- }
Student.hbm.xml文件中的配置:
- <class name="bean.Student" table="student">
- <composite-id name="primaryKey" class="bean.PrimaryKey"><!--PrimaryKey为我们自定义的主键类-->
- <key-property name="name" column="student_name" type="string"></key-property><!--name及cardID为PrimaryKey类中的属性-->
- <key-property name="cardID" column="card_id" type="string"></key-property>
- </composite-id>
- <property name="age" column="student_age" type="int"></property>
- </class>
保存对象:
- tx=session.beginTransaction();
- Student s1=new Student();
- s1.setAge(23);
- PrimaryKey p=new PrimaryKey();
- p.setCardID("102");
- p.setName("zhangsan");
- s1.setPrimaryKey(p);
- session.save(s1);
- tx.commit();
同样,对于上述代码的重复执行也会导致主键重复抛出异常。
查询:
- PrimaryKey p=new PrimaryKey();
- p.setCardID("711");
- p.setName("lisi");
- Student s=(Student)session.get(Student.class,p);//所以PrimaryKey要实现Serializable接口
- System.out.println(s.getAge());
4.对于以上两种映射联合主键的方式,反映到数据库中的表的结构是相同的,student表的内容为:
相关推荐
### hibernate生成实体类 #### 简介 在软件开发过程中,ORM(对象关系映射)技术被广泛应用于数据库操作之中,它能够将数据库表结构与程序中的对象进行映射,极大地简化了数据访问层的编码工作。Hibernate作为一款...
教你如何用Hibernate生成映射文件和实体类,简单方便。
3. **创建映射文件**:在生成实体类之前,通常需要为每个表创建一个`.hbm.xml`映射文件,这个文件描述了数据库表和实体类之间的关系。映射文件包含表名、字段名及其类型等信息。 4. **执行生成命令**:使用`...
接着,通过命令行或者集成到构建工具(如Maven或Gradle)中运行`Hibernate-tools`,执行反编译数据库模式、生成实体类等任务。 4. **自定义模板** `Hibernate-tools`允许开发者自定义模板,以满足特定的代码风格和...
### 使用Hibernate逆向生成实体类的方法 在Java开发领域中,Hibernate作为一种流行的ORM(对象关系映射)框架,被广泛应用于将对象模型映射到基于SQL的关系型数据库上。通过Hibernate,开发者能够更加高效地处理...
"自动生成 Hibernate 映射文件和实体类" 自动生成 Hibernate 映射文件和实体类是使用 MyEclipse 工具来实现的,这可以大大提高开发效率,减少开发...这可以帮助开发者快速生成实体类和映射文件,提高开发效率和质量。
然后,选择需要生成实体类的表,工具会自动读取表结构,包括字段名、数据类型等信息。接下来,通过预览功能检查生成的实体类代码是否满足需求,最后点击生成按钮,实体类代码就会自动生成到指定目录。 总的来说,...
MyEclipse与Hibernate反向生成实体类和DAO MyEclipse是一个基于Eclipse平台的集成开发环境(IDE),它提供了很多实用的功能和插件来帮助开发者快速开发Java应用程序。Hibernate是一个流行的对象关系映射(ORM)框架...
- **自动映射**:实体生成工具会根据数据库中的表结构自动生成实体类,包括属性、注解等,完成对象与表的映射。 - **节省时间**:手动创建这些实体类可能非常耗时,特别是在大型项目中,涉及到的表很多。工具的使用...
本文将深入探讨Hibernate配置以及如何自动生成实体类。 1. Hibernate配置: Hibernate的配置主要通过`hibernate.cfg.xml`文件进行,这个文件包含了连接数据库所需的各项参数,如数据库URL、用户名、密码、驱动类等...
eclipse从数据库逆向生成Hibernate实体类
通过以上步骤,我们不仅能够快速地在MyEclipse中创建Hibernate项目,还能自动生成实体类及其映射配置文件,大大提高了开发效率。这对于需要频繁与数据库交互的应用程序来说,无疑是一种非常有用的技巧。
IDEA Hibernate JPA 生成实体类的实现 在本篇博客中,我们将主要介绍 IDEA 中使用 Hibernate JPA 生成实体类的实现步骤。通过示例代码,我们将详细介绍如何使用 IDEA 生成实体类,同时也将对 Hibernate JPA 的基本...
Myeclipse 提供了强大的功能来支持 Hibernate 的开发,包括自动生成实体类映射、Hibernate 配置文件等。 在实际开发中,我们可以根据需要选择不同的 ORM 框架,例如 Hibernate、JPA 等。不同的 ORM 框架都有其特点...
【Java实战教程】12. 新建Hibernate反向生成实体类工程.haozip02.zip
代码生成工具能自动生成与数据库表对应的实体类(model层),以及数据访问对象(DAO层)和相关的服务接口及实现(servers层)。这样,开发者就可以专注于业务逻辑,而不是数据库操作的细节。 Spring框架是Java企业...
**第二步**:在“Explorer”选项卡中,可以勾选“Generate Entities”来生成实体类,也可以勾选“Generate DAO”来生成DAO层的文件。 **第三步**:点击“Apply”应用配置,再点击“Run”开始生成实体类和DAO文件。 ...
接下来,我们将使用Eclipse和Hibernate Tools来配置并生成实体类: 1. **打开Hibernate Configuration视图**: - 在Eclipse中选择 **Windows** > **Show View** > **Other...**。 - 输入 **Hibernate ...
hibernate@注解方式配置实体类时,利用javadoc接口生成数据库表及字段的注释说明,支持oracle、sqlserver、db2、mysql数据库。因用到java\lib\tools.jar,需要将该jar放入工程lib下(或者tomcat\lib下、或加入...