中午快吃饭的时候问小弟任务作的怎么样,小弟突然和我说他遇到一个郁闷问题。在使用POI做Excel数据批量导入程序编写的时候,hibernate的save方法无效。但是从Form表单中提取信息做单个保存有效。Eclipse的控制台没有报错信息。
刚听问题,觉得很奇怪,把玩Hibernate多年,虽然离精通还相距甚远,但是遇到的大大小小的问题还不少,倒是没有遇到过这种问题。
凑过去粗看了下程序执行,确实什么问题也没有。控制台无任何信息,页面也按照指定方式进行了跳转。思索着是不是因为多对一、一对多关系中inverse的配置错,导致类本身无法保存信息。可是多对一关系中一方的hbm.xml文件里压根儿就没有配置一对多关系,因此Hibernate应该是以默认的形式执行操作,也就是说应该会保存。
眼下没有错误报告是最大的问题,多少得弄出点错误,我在程序中给需要保持的持久类的ID手动配置了一个不违反唯一性约束的数值,重复保存操作。我知道,一旦制定了ID,hibernate会去执行update操作而非insert/save操作。错误始终是会报的,不过,控制台输出的并非是我所预料的错误,而是告知该记录引用了关联表中不存在的记录。
这下豁然开朗,回顾小弟写的代码,发现小弟是用new方法构造了一个引用类的对象并set进了需要持久化的对象中,导致hibernate无法保存数据。
不过不知道为什么之前不报错呢?
分享到:
相关推荐
在Java持久化框架Hibernate中,级联操作是处理对象关系映射(ORM)时非常重要的一个特性。级联操作允许我们在对一个实体进行操作时,自动地影响与之相关的其他实体,无需显式地处理这些关联。在这个" Hibernate级联...
视图-控制器(MVC)架构,Spring 4 提供了全面的服务层支持,包括依赖注入、AOP(面向切面编程)以及事务管理等,而Hibernate 5 是一个对象关系映射(ORM)框架,简化了数据库操作。接下来,我们将深入探讨这三个...
在使用Hibernate4进行数据持久化操作时,可能会遇到执行`save()`或`update()`方法后,数据并未成功保存到数据库的情况。这个问题可能由多种原因引起,包括但不限于主键设置、事务管理、实体类属性与数据库表字段的...
- 插入:使用Session的save()或saveOrUpdate()方法。 - 更新:使用Session的update()或saveOrUpdate()方法。 - 删除:使用Session的delete()方法。 - 查询:使用Session的get()、load()或Criteria API,或HQL...
Hibernate 是一个开源的Java平台上的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为对Java对象的操作,从而简化了数据持久化的复杂度。在Java应用开发中,Hibernate 提供了一种方便、高效的方式来处理...
使用Hibernate的Session接口来执行这些操作,如`save()`, `update()`, `delete()`, `load()`和`find()`等。 5. **整合JSF和Hibernate**:在JSF的后台bean(通常是Managed Bean)中,注入DAO,调用其方法进行CRUD...
- **CRUD操作**: 使用Session的save()、update()、delete()和load()、get()方法完成对象的持久化。 - **查询**: HQL(Hibernate Query Language)提供了类似于SQL的查询方式,更面向对象,也可以使用Criteria API...
Hibernate是一个对象关系映射(ORM)工具,它允许开发人员使用面向对象的方式来处理数据库操作,极大地简化了Java应用中的数据访问层。本指南主要涵盖以下几个核心知识点: 1. **Hibernate概述**:Hibernate作为...
4. **操作数据库**:Hibernate支持CRUD(Create、Read、Update、Delete)操作,使用Session的save()、get()、update()和delete()方法可以轻松完成对数据库的操作。 5. **查询语言**:Hibernate提供了一种强大的查询...
Hibernate是一款开源的对象关系映射(ORM)框架,它允许Java开发者在关系数据库和对象模型之间建立桥梁,使得数据库操作可以通过对象的方式进行,极大地简化了Java应用程序的开发。本中文帮助文档详细介绍了...
- 第二个`testSave()`方法试图在save()之前为对象赋ID,这在Hibernate中是无效的,因为ID由Hibernate自动管理。 - 第三个`testSave()`尝试在对象已经持久化后修改ID,这是不允许的,因为它违反了数据库的唯一性约束...
在Java世界中,Hibernate是一款非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,让开发者可以专注于业务逻辑而不是底层的SQL代码。本指南将深入探讨Hibernate的核心概念、配置、实体管理以及高级特性...
6. CRUD操作:使用Session的save(), update(), delete(), load()或get()等方法完成对象的持久化操作。 7. 查询:使用HQL或Criteria API进行对象查询。 8. 提交事务:所有操作完成后,提交事务,确保数据一致性。 五...
例如,使用`save()`方法保存新对象,`update()`更新已存在的对象,`delete()`删除对象。 六、Criteria与HQL 除了传统的Java代码操作,Hibernate还提供了强大的查询语言HQL(Hibernate Query Language)和Criteria ...
5. 避免在循环中执行数据库操作,可能导致大量无效数据库交互。 这份文档集将带你逐步探索Hibernate的世界,从基本的配置到复杂的查询,从简单的CRUD操作到事务和缓存管理,全方位提升你在Java开发中的数据库操作...
如果已经知道学生和课程的ID,可以通过Hibernate的Session接口执行添加或删除关联的操作,例如`session.save()`或`session.delete()`。 总结起来,这个案例涵盖了使用Struts和Hibernate构建一个多对多关系的Web应用...
在增删改查场景下,Hibernate通过Session接口执行SQL操作,如save()用于插入,update()用于更新,delete()用于删除,而find()或query()方法用于查询。 在这个例子中,Struts的验证框架被用于前端表单数据的校验。它...
在 Hibernate 中,可以通过使用 Transaction 的 setTransactionIsolation() 方法来设置事务的隔离级别。例如: ```java Transaction transaction = session.beginTransaction(); transaction....