`

Hibernate一点理解

阅读更多
Hibernate中xx.hbm.xml配置文件的作用:
        配置文件只是负责被Hibernate框架读取,作为一种ORM类型框架,可想而知,负责Object到DB的一种映射。那么在框架中配置的文件肯定是被框架抓取,并来组织数据到数据库中的插入操作,所以映射配置文件的错误将导致数据不能够正确插入数据库。
        还有一种情况,即使映射的配置文件配置成功,但你的程序没有按照你配置的方式来组织代码,也不会往数据库中插入正确的数据。
下面给出代码对上面的解释来进行说明:
--------------------------------->User.java/Profile.java
public class User implements java.io.Serializable {
 private Integer id;
 private String username;
 private String password;
 private Profile profile;
 setter and getter methods......
}
public class Profile {
 private String email;
 private String mobile;
 private String phone;
 private String address;
 private String postcode;
setter and getter methods......
}
--------------------------->User.hbm.xml
<hibernate-mapping>
 <class name="com.digilover.hibernate.models.User" table="USERS"
  schema="SCOTT" lazy="true">
  <id name="id" type="java.lang.Integer">
   <column name="ID" precision="10" scale="0" />
   <generator class="increment"></generator>
  </id>
  <property name="username" type="java.lang.String">
   <column name="USERNAME" length="20" />
  </property>
  <property name="password" type="java.lang.String">
   <column name="PASSWORD" length="20" />
  </property>
  <component name="profile" class="com.digilover.hibernate.models.Profile">
   <property name="email" type="java.lang.String">
    <column name="EMAIL" length="200" />
   </property>
   <property name="mobile" type="java.lang.String">
    <column name="MOBILE" length="11" />
   </property>
   <property name="phone" type="java.lang.String">
    <column name="PHONE" length="20" />
   </property>
   <property name="address" type="java.lang.String">
    <column name="ADDRESS" length="200" />
   </property>
   <property name="postcode" type="java.lang.String">
    <column name="POSTCODE" length="20" />
   </property>
  </component>
 </class>
</hibernate-mapping>
-------------------------->Test.java
public class Test {
 public static void main(String[] args) {
  User user = new User();
  user.setUsername("朱茵");
  user.setPassword("222222");
  
  Profile profile = new Profile();
  profile.setEmail("zhuyin@sina.cn");
  profile.setPostcode("222222");
  profile.setAddress("北京海定区王府井路2");
  profile.setMobile("12345678909");
  profile.setPhone("7654321");
  
  //user.setProfile(profile);
   save(user);
 }
public static void save(User user){
  Session session = HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
  session.beginTransaction();
  session.save(user);
  session.getTransaction().commit();
 }
 
}
注意上面注释掉的那句话,如果没有了它,那么数据库中不会正确插入完整数据,Profile中的属性值不会被插入数据库中,因为Profile对象profile没有与User对象user关联,框架根据映射的配置文件找不到与User对象关联的Profile对象。这就是我上面所说的映射文件配置正确,但程序代码组织的不到位,导致框架不能将实体类ORM到数据库中。至于第一种情况,可以将上面的红色字体配置去掉,试验下。
分享到:
评论

相关推荐

    Hibernate+中文文档

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    hibernate3.2中文文档(chm格式)

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    HibernateAPI中文版.chm

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    Hibernate中文详细学习文档

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    Hibernate 中文 html 帮助文档

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate教程

    20.5. 理解集合性能(Understanding Collection performance) 20.5.1. 分类(Taxonomy) 20.5.2. Lists, maps 和sets用于更新效率最高 20.5.3. Bag和list是反向集合类中效率最高的 20.5.4. 一次性删除(One ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    hibernate3.04中文文档.chm

    20.5. 理解集合性能(Understanding Collection performance) 20.5.1. 分类(Taxonomy) 20.5.2. Lists, maps 和sets用于更新效率最高 20.5.3. Bag和list是反向集合类中效率最高的 20.5.4. 一次性删除(One...

    hibernate 框架详解

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二...

    Hibernate参考文档

    19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...

    (2.0版本)自己写的struts2+hibernate+spring实例

    SINGER VARCHAR2(100), MUSICNAME VARCHAR2(200), LYRIC VARCHAR2(4000) ) &lt;br&gt; 优化了界面布局.(第一个写的是太丑了一点.) 优化了action的相关方法逻辑和接口方法. 更加好理解和清晰...

    持久层框架ibatis学习笔记

    这一点是Hibernate 是所不及的。 总之,学习iBatis 是非常容易上手的,有过sql 和Hibernate 的基础,我跟着传智播客的视频 学了几个小时就掌握了iBatis 的核心操作。当然iBatis 还有一些更深层的原理与更强大的功 能...

    php-ssh-master面向对象的SSH包装库.zip

    SSH从头到尾都是围绕着一个中心建立的:面向对象。 Hibernate是作为一种对象持久化手段而存在的。所谓的O/R MAPPING其实就是持久化。...这样子的话对于理解持久化的概念会更容易与直接一点。

    java集训项目、案例等.rar

    最近有很多小伙伴私信我说推荐几个毕设项目,还有就是学了Java有一段时间了,想找几个项目想练练手,在面试的时候也可以增加一点项目经验。 在这里我收集了10个可以直接导入运行的项目。 由简单到复杂,分别为:...

    北风客户关系管理源码 CRM

    如果您能够完整的学好这个项目(自己能够理解业务等),走进企业,您完全不需要去考虑工作是否可以胜任,只要您告诉您的面试官,您所了解CRM方面的业务实现之类的! 2.流行趋势 该项目使用流行的Struts 2 + Hibernate ...

    gwizard:受DropWizard启发,用于使用Guice构建Web服务的模块化工具包

    GWizard被实现为一组Guice模块(打包在单独的maven模块中),您可以对其进行混合和匹配,以启用日志记录,jaxrs服务,Hibernate等功能,并且具有接近零的样板。 帮助 最好的帮助网站是gwizard Google网上论坛: :/...

    Maven2 的新特性.7z

    Maven 无疑是相当成功的,这一点从越来越多的开源项目开始使用 Maven 就可以看出。Maven 取得成功的原因很简单:在简化构建脚本的同时,功能并没有缩水,反而有所增强;提供汇集项目信息的工具,并以相当友好的方式...

    Spring基础与快速入门

    1 非侵入式:对于写代码从来不考虑复用和移植的程序员来说,这一点根本就没有吸引力,那么请跳过。所谓非侵入式是指Spring框架的API不会在业务逻辑上出现,也就是说我们的业务逻辑应该是纯净的,不能出现与业务逻辑...

    JAVA自学之路

    当你看书到某个地方暂时不理解的时候的,暂时放手吧,追求一些行云流水、自然而然的境界吧,只是不要停下前进的脚步,不要被大路旁边的支根末节干扰了你前进的行程,项目,真实的项目,这才是目的,就在不远的前方...

Global site tag (gtag.js) - Google Analytics