hibernate+oracle+servlet实现插入数据的时候,不立马显示!!

简介: hibernate+oracle+servlet实现插入数据的时候,不立马显示!!

尊重原创!!!


    开发软件:myeclipse 10+oracle 11g


    开发项目:租房系统


    开发人员:1111


    出现的问题:在前台发布房屋信息的界面插入数据时,自动跳转到查询所有房屋信息的页面,数据显示不完整,本表的可以显示,有外键的都显示不出来,(比如,街道(Street)信息是一个单独的表,在房屋信息表(House)里面引用的街道表的id,通过Street street=new Street(),street.getName()来获取街道名字),运行完之后也不报错,但是就是不显示!!!


    直接上图可能更详细点;20170304000850595.png

20170304000912493.png


20170304000924579.png




 问题分析:


        这种问题还是第一次见,自己初步分析:


1.可能是前台通过jstl获取数据的时候,字段显示不对?


2.在servlet里面没有把街道信息放在request作用域里面?


3.没有提交(commit());


4.数据库里面可能就没有把街道信息添加进去!


   问题分析完之后那就开始一个一个的检查,先看显示房屋信息的界面,验证分析1是否正确:

20170304001001073 (1).png

20170304001054011.png


仔细检查之后发现排除分析1

    继续在看分析2是否正确,


20170304001422328.png


20170304001434551.png

20170304001637083.png


发现我都放进作用域里面了,并且一块转发到了显示的界面,有点纳闷了,这又是为啥呢?

     既然分析二也排除掉,那就接着看分析3和分析4,她两一块看,先去数据库里面看看添加上来了没,数据库里面没有的话就是没有commit,然后我就在数据库里面查了一遍

20170304002128226.png


 卧槽,数据倒是进来了,但是为什么不显示呢?根据已有的思路都分析完了,还是不行咋整?灵机一动,去问问百度吧,也许能问出点啥来了!!


   好,说走咱就走,问了下百度,百度和我说了一堆废话。。。。什么配置文件错误,映射文件有误......靠天靠地不如靠自己,使劲用脑子在想解决方法,继续分析:既然数据库里面都有数据,前台没有数据?前台页面的其他记录都是从数据库里获取的,不应该光这个获取不到啊,重启服务试试!!!


   重启了下服务,上来前台页面看了下,.....显示出来了,数据都显示出来了,包括街道和房屋类型一个都没少

20170304003044526.png



难道是我服务的事?于是乎,继续添加一条记录试试看。赶紧添加完之后跳转到显示所有的页面,奇诡的是其他的记录都有,就是新添加的这条记录没有显示出来。。。居然还是不行,既然还不行的话我就在DaoImpl里面把各个时期的值输出来看看是哪里没数据?

20170304003645485.png


20170304003655389.png

有数据,包括新添加的也在里面,那就去看看Servlet里面的数据看看有没有?


20170304003821233.png


 没办法,也有数据,继续在想哪里的原因,难道是hibernate缓冲的问题?(之前无意间看到hibernate的缓冲),那就按照缓冲来测试一下,先把session.close看看是否管用

20170304004346744.png

执行的时候报错!session 是关闭的!!既然关闭了不行,那就试试flush(),与数据库同步数据看看会怎么样


 报错倒是不报错,但是白搭,还是和之前一样,那就在试试clear()看看怎么样,过了2分钟,测试完毕,还是一样居然,图就不上了!!!不能这样乱测试了,在静下来好好的分析一下哪里的问题!之前一直是在添加的DaoImpl里面测试session的clear()  flush()  close(),感觉不大对劲,既然是查询不出来,那就得在查询的方法里面清除session的缓冲,开始行动,我给添加的方法里面清空了一下session,用的是clear(),在查询的里面用的是flush(),感觉这样分析应该没问题,让查询的数据和数据库里面进行同步,就不信还不行?


     于是抱着试试的态度进行测试了一下,居然可以显示出来了。解决了一晚上没有解决掉的bug,终于解决掉了!!!所以总结一下session的clear()和flush的区别:


最简单的理解就是:



   session.flush()的作用就是将session的缓存中的数据与数据库同步。


   session.clear()的作用就是清除session中的缓存数据。


还有不足的地方还请各位大神多多指点指点,本人的总结就这些了!!!









相关文章
|
8月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
在YMP校验过程中,从yashandb同步至Oracle的数据出现timestamp(0)字段不一致问题。原因是yashandb的timestamp(x)存储为固定6位小数,而Oracle的timestamp(0)无小数位,同步时会截断yashandb的6位小数,导致数据差异。受影响版本:yashandb 23.2.7.101、YMP 23.3.1.3、YDS联调版本。此问题会导致YMP校验数据内容不一致。
|
9月前
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有 YashanDB 版本。原因是操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常源于 system() 函数调用失败,返回 -1,通常是因为 fork() 失败。未来 YashanDB 将优化日志信息以更好地诊断类似问题。
|
8月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
8月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
|
8月前
|
Oracle 关系型数据库 Linux
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
|
9月前
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
某客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有版本。问题源于操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常原因为系统调用 fork() 失败。经验总结:优化日志记录,提供更多异常信息。
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
253 0
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
8月前
|
存储 Oracle 关系型数据库
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
185 2
【赵渝强老师】Oracle的还原数据

推荐镜像

更多