`

hibernate生成实体

 
阅读更多

1.联合主键的映射规则

1) 类中的每个主键属性都对应到数据表中的每个主键列

Hibernate要求具有联合主键的实体类实现Serializable接口,并且重写hashCodeequals方法,重写这两个方法的原因在于Hibernate要根据数据库的联合主键来判断某两行记录是否是一样的,如果一样那么就认为是同一个对象,如果不一样,那么就认为是不同的对象。这反映到程序领域中就是根据hashCode与equals方法来判断某两个对象是否能够放到诸如Set这样的集合当中。联合主键的实体类实现Serializable接口的原因在于使用get或load方法的时候需要先构建出来该实体的对象,并且将查询依据(联合主键)设置进去,然后作为get或load方法的第二个参数传进去即可。

2) 将主键所对应属性提取出一个类(称之为主键类),并且主键类需要实现Serializable接口,重写equals方法与hashCode方法,原因与上面一样。

以Student类为例,实现上述两种映射联合主键的配置:

2.Student中的两个属性作为联合主键属性

Student类:

 

[java] view plaincopy
 
  1. public class Student implements Serializable {//必须要实现Serializable接口  
  2.   
  3.     private String cardID;//cardID和name映射为联合主键  
  4.     private String name;  
  5.     private int age;  
  6.         //get、set、hashCode、equals方法省略  
  7. }  

注:可使用MyEclipse中的Sourse-->Gennerate hashCode and equals来使用MyEclipse快速生成hashCode和equals方法

 

Student.hbm.xml配置:

 

[html] view plaincopy
 
  1. <class name="bean.Student" table="student">  
  2.         <composite-id><!--联合主键,student表中的主键为(student_name,card_id)-->  
  3.            <key-property name="name" column="student_name" type="string"></key-property><!--name及cardID为Student类中的属性-->  
  4.            <key-property name="cardID" column="card_id" type="string"></key-property>  
  5.         </composite-id>  
  6.         <property name="age" column="student_age" type="int"></property>  
  7. </class>  

保存对象:

 

 

[java] view plaincopy
 
  1. tx=session.beginTransaction();  
  2.   
  3. Student s1=new Student();  
  4. s1.setName("lisi");  
  5. s1.setAge(22);  
  6. s1.setCardID("711");  
  7. System.out.println(s1);  
  8. session.save(s1);  
  9. tx.commit();  

注意:主键为(card_id,student_id)若连续执行上述的保存语句两次,当然会抛异常,应为主键重复:   
           org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
3.将Student类中的两个主键属性提取为一个新的类PrimaryKey,即主键类

 

主键类PrimaryKey:

 

[java] view plaincopy
 
  1. public class PrimaryKey implements Serializable{  
  2.   
  3.     private String cardID;  
  4.     private String name;  
  5.     //get、set、hashCode、equals方法省略  
  6. }  

Student类中含有PrimaryKey类型的属性及对应set、get方法:

 

 

[java] view plaincopy
 
  1. public class Student  {  
  2.     private int age;  
  3.     private PrimaryKey primaryKey;  
  4.         //set、get方法省略  
  5. }  

Student.hbm.xml文件中的配置:

 

 

[html] view plaincopy
 
  1. <class name="bean.Student" table="student">  
  2.     <composite-id name="primaryKey" class="bean.PrimaryKey"><!--PrimaryKey为我们自定义的主键类-->  
  3.        <key-property name="name" column="student_name" type="string"></key-property><!--name及cardID为PrimaryKey类中的属性-->  
  4.        <key-property name="cardID" column="card_id" type="string"></key-property>  
  5.     </composite-id>  
  6.     <property name="age" column="student_age" type="int"></property>  
  7. </class>  

保存对象:

 

 

[java] view plaincopy
 
  1. tx=session.beginTransaction();  
  2.   
  3.  Student s1=new Student();  
  4.  s1.setAge(23);  
  5.  PrimaryKey p=new PrimaryKey();  
  6.  p.setCardID("102");  
  7.  p.setName("zhangsan");  
  8.  s1.setPrimaryKey(p);  
  9.  session.save(s1);  
  10.  tx.commit();  

同样,对于上述代码的重复执行也会导致主键重复抛出异常。

查询:

 

[java] view plaincopy
 
  1. PrimaryKey p=new PrimaryKey();  
  2. p.setCardID("711");  
  3. p.setName("lisi");  
  4. Student s=(Student)session.get(Student.class,p);//所以PrimaryKey要实现Serializable接口  
  5. System.out.println(s.getAge());  

 

4.对于以上两种映射联合主键的方式,反映到数据库中的表的结构是相同的,student表的内容为:

 

分享到:
评论

相关推荐

    hibernate生成实体类

    ### hibernate生成实体类 #### 简介 在软件开发过程中,ORM(对象关系映射)技术被广泛应用于数据库操作之中,它能够将数据库表结构与程序中的对象进行映射,极大地简化了数据访问层的编码工作。Hibernate作为一款...

    Hibernate生成映射文件和实体类

    教你如何用Hibernate生成映射文件和实体类,简单方便。

    生成hibernate实体类

    3. **创建映射文件**:在生成实体类之前,通常需要为每个表创建一个`.hbm.xml`映射文件,这个文件描述了数据库表和实体类之间的关系。映射文件包含表名、字段名及其类型等信息。 4. **执行生成命令**:使用`...

    Hibernate-tools解决hbm.xml中文注释乱码和生成实体类注释

    接着,通过命令行或者集成到构建工具(如Maven或Gradle)中运行`Hibernate-tools`,执行反编译数据库模式、生成实体类等任务。 4. **自定义模板** `Hibernate-tools`允许开发者自定义模板,以满足特定的代码风格和...

    使用Hibernate逆向生成实体类的方法(注解和hbm.xml映射文件)

    ### 使用Hibernate逆向生成实体类的方法 在Java开发领域中,Hibernate作为一种流行的ORM(对象关系映射)框架,被广泛应用于将对象模型映射到基于SQL的关系型数据库上。通过Hibernate,开发者能够更加高效地处理...

    自动生成hibernate映射文件和实体类

    "自动生成 Hibernate 映射文件和实体类" 自动生成 Hibernate 映射文件和实体类是使用 MyEclipse 工具来实现的,这可以大大提高开发效率,减少开发...这可以帮助开发者快速生成实体类和映射文件,提高开发效率和质量。

    Hibernate实体类生成器mysql版

    然后,选择需要生成实体类的表,工具会自动读取表结构,包括字段名、数据类型等信息。接下来,通过预览功能检查生成的实体类代码是否满足需求,最后点击生成按钮,实体类代码就会自动生成到指定目录。 总的来说,...

    myeclipse与hibernate―反向生成实体类和DAO

    MyEclipse与Hibernate反向生成实体类和DAO MyEclipse是一个基于Eclipse平台的集成开发环境(IDE),它提供了很多实用的功能和插件来帮助开发者快速开发Java应用程序。Hibernate是一个流行的对象关系映射(ORM)框架...

    hibernate实体生成工具

    - **自动映射**:实体生成工具会根据数据库中的表结构自动生成实体类,包括属性、注解等,完成对象与表的映射。 - **节省时间**:手动创建这些实体类可能非常耗时,特别是在大型项目中,涉及到的表很多。工具的使用...

    hibernate 配置 实体生成

    本文将深入探讨Hibernate配置以及如何自动生成实体类。 1. Hibernate配置: Hibernate的配置主要通过`hibernate.cfg.xml`文件进行,这个文件包含了连接数据库所需的各项参数,如数据库URL、用户名、密码、驱动类等...

    eclipse从数据库逆向生成Hibernate实体类

    eclipse从数据库逆向生成Hibernate实体类

    MyEclipse自动生成hibernate实体类配置文件

    通过以上步骤,我们不仅能够快速地在MyEclipse中创建Hibernate项目,还能自动生成实体类及其映射配置文件,大大提高了开发效率。这对于需要频繁与数据库交互的应用程序来说,无疑是一种非常有用的技巧。

    idea hibernate jpa 生成实体类的实现

    IDEA Hibernate JPA 生成实体类的实现 在本篇博客中,我们将主要介绍 IDEA 中使用 Hibernate JPA 生成实体类的实现步骤。通过示例代码,我们将详细介绍如何使用 IDEA 生成实体类,同时也将对 Hibernate JPA 的基本...

    Myeclipse自动生成Hibernate配置文件及实体类映射ORM

    Myeclipse 提供了强大的功能来支持 Hibernate 的开发,包括自动生成实体类映射、Hibernate 配置文件等。 在实际开发中,我们可以根据需要选择不同的 ORM 框架,例如 Hibernate、JPA 等。不同的 ORM 框架都有其特点...

    【Java实战教程】12. 新建Hibernate反向生成实体类工程.haozip02.zip

    【Java实战教程】12. 新建Hibernate反向生成实体类工程.haozip02.zip

    java代码自动生成工具

    代码生成工具能自动生成与数据库表对应的实体类(model层),以及数据访问对象(DAO层)和相关的服务接口及实现(servers层)。这样,开发者就可以专注于业务逻辑,而不是数据库操作的细节。 Spring框架是Java企业...

    eclipse由数据库反向生成hibernate实体类(图解).doc

    **第二步**:在“Explorer”选项卡中,可以勾选“Generate Entities”来生成实体类,也可以勾选“Generate DAO”来生成DAO层的文件。 **第三步**:点击“Apply”应用配置,再点击“Run”开始生成实体类和DAO文件。 ...

    eclipse hibernate 反向生成带注解的实体类-步骤说明--详细

    接下来,我们将使用Eclipse和Hibernate Tools来配置并生成实体类: 1. **打开Hibernate Configuration视图**: - 在Eclipse中选择 **Windows** &gt; **Show View** &gt; **Other...**。 - 输入 **Hibernate ...

    hibernate@注解方式配置实体类,调用javadoc接口生成数据库表及字段的注释说明

    hibernate@注解方式配置实体类时,利用javadoc接口生成数据库表及字段的注释说明,支持oracle、sqlserver、db2、mysql数据库。因用到java\lib\tools.jar,需要将该jar放入工程lib下(或者tomcat\lib下、或加入...

Global site tag (gtag.js) - Google Analytics