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的一点总结】 Hibernate 是一个流行的 Java ORM(对象关系映射)框架,它允许开发者使用面向对象的方式操作数据库,将Java类与数据库表进行映射,从而避免了直接编写SQL语句的繁琐工作。这个框架的核心...
理解并掌握这些知识点对于开发基于Java的Web应用至关重要,特别是在涉及到用户认证和授权的情景下。通过实际操作和学习这个项目,开发者可以更深入地了解Spring和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框架的理解与观点,这一部分提到了Hibernate在处理数据库操作时的一些关键特性,如事务管理、对象持久化以及查询优化等。以下是对这些知识点的详细阐述: ### 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 ...
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 criteria 分组 排序 关联”这一标题明确了本文将围绕Hibernate Criteria API进行分组、排序以及关联查询的具体应用进行讨论。 - **描述**:描述部分重复了标题的内容...
Hibernate Search通过分析文本并创建倒排索引来实现这一点。 3. 集成Hibernate Search:将Hibernate Search集成到Java应用中,开发者可以通过注解实体类和字段,使它们参与全文索引。这使得数据库中的数据能够被...
在使用`load`方法时,需要注意的一点是,如果对象在事务的生命周期内从未被初始化,那么在事务结束时,Hibernate不会发出任何SQL查询。这可能会导致一些隐藏的空指针异常,因为对象看起来已经被加载但实际上没有。...
19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One ...
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. **性能问题:** 在某些情况下,Hibernate可能会因为过度封装而导致性能下降,特别是对于需要高度优化性能的应用来说,这一点尤为明显。 3. **学习曲线陡峭:** 由于Hibernate功能强大且复杂,初学者可能需要花费...
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. 第...
20.5. 理解集合性能(Understanding Collection performance) 20.5.1. 分类(Taxonomy) 20.5.2. Lists, maps 和sets用于更新效率最高 20.5.3. Bag和list是反向集合类中效率最高的 20.5.4. 一次性删除(One ...
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框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...
有两种方式来实现这一点:使用`addScalar()`方法和`setResultTransformer()`方法。假设我们有一个User类,包含id和name属性: ```java query.addScalar("id", Hibernate.LONG).addScalar("name", Hibernate.STRING)...
这里的关键在于 Hibernate 如何将这些参数转换为 SQL 查询语句,以便不同的数据库系统都能够理解并执行。为了做到这一点,Hibernate 会根据当前使用的数据库类型来动态生成合适的 SQL 语句。 #### SQL 分页语法的...
1. **面向对象的编程风格**:Hibernate采用面向对象的方式进行数据库操作,这种模式使得开发者能够更加直观地理解数据模型,并且通过Java对象来表示数据库中的表,这大大提升了开发效率。相比之下,iBatis虽然也支持...