精华内容
下载资源
问答
  • hibernate事务提交执行sql顺序

    千次阅读 2017-04-28 16:12:40
    sql hibernate 顺序

    SSH框架下,spring的事务中提交时hibernate的sql执行顺序错乱,未按代码顺序实现。

    Hibernate在最终执行SQL语句时,居然是按INSERT, UPDATE, DELETE的顺序执行的,而非按照代码顺序执行!

    原因
    hibernate了性能优化,不会把sql语句直接提交给数据库,而是先放在hibernate的缓存中等事务commit的时候一起提交,为的是利用batch操作提高数据库操作性能。
    这样就导致sql语句执行的顺序与程序不一致。

    解决办法
    在需要同步的地方(即按照INSERT, UPDATE, DELETE顺序有可能产生问题的时候;混用JDBC操作的时候),执行session.flush()方案,该方法将缓存中的数据请求立即转换为数据库操作并执行

    flush就是把sql缓冲区的sql语句发送到数据库去。

    在大批量数据处理的时候,可能需要分批刷出数据,然后清空缓存,以减少内存占用量。

    我的sql顺序错乱原因:使用了本地的sql,它会绕过hibernate持久化管理的方法,影响业务。

    解决方法:
    从SQL.xml文件中读取sql执行的方法改为hibernate的执行hql方法

    Session session =  getHibernateTemplate().getSessionFactory().getCurrentSession();
    
    SQLQuery query = session.createSQLQuery(sql);
    return query.list();
    

    改为

    Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    
    Query query = session.createQuery(hql);
    
    //query.uniqueResult();
    query.list();

    hibernate 中createQuery与createSQLQuery两者区别是:

    createQuery:
    (1)hql语句进行查询
    (2)hibernate生成的Bean为对象装入list返回

    createSQLQuery
    (1)sql语句查询
    (2)以对象数组进行存储。
    想以hibernate生成的Bean为对象装入list返回,就不是很方便。
    但是它有这样一个方法可以直接转换对象
    Query query = session.createSQLQuery(sql).addEntity(XXX.class);
    XXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean

    展开全文
  • 代码中的执行顺序 spring事务中的执行顺序

    问题

    SSH框架下,spring的事务中提交时hibernate的sql执行顺序错乱,未按代码顺序实现。 JPA也是。

    Hibernate在最终执行SQL语句时,居然是按INSERT, UPDATE, DELETE的顺序执行的,而非按照代码顺序执行!

    代码中的执行顺序
    在这里插入图片描述
    事务提交后Hibernate Session中的执行顺序
    在这里插入图片描述

    原因

    Hibernate为了性能优化,对象操作都是放在缓存里而没有立即执行数据库操作直到commit操作,为的是利用batch操作提高数据库操作性能。看完这句话感觉Hibernate还挺好,自行优化,如果只到这里那岂不是皆大欢喜。但是、但是、但是,Hibernate有个骚操作:在最终执行SQL语句时,会重新给SQL排序,按INSERT, UPDATE, DELETE的顺序执行的,而非按照代码顺序执行!W T F!L Z的业务逻辑怎么办?同理,在一个事务中混用Hibernate和Jdbc操作,也会导致数据不一致的问题。

    具体的执行顺序:
    所有对实体进行插入的语句,其顺序按照对象执行Session.save()的时间顺序
    所有对实体进行更新的语句
    所有进行集合删除的语句
    所有对集合元素进行删除,更新或者插入的语句
    所有进行集合插入的语句
    所有对实体进行删除的语句,其顺序按照对象执行Session.delete()的时间顺序

    解决办法

    在需要同步的地方(即按照INSERT, UPDATE, DELETE顺序有可能产生问题的时候;混用JDBC操作的时候),执行session.flush()方案,该方法将缓存中的数据请求立即转换为数据库操作并执行

    flush就是把sql缓冲区的sql语句发送到数据库去。

    在大批量数据处理的时候,可能需要分批刷出数据,然后清空缓存,以减少内存占用量。

    如果操作逻辑少的话,执行完每条sql都会返回一个int值(成功行数),>0则执行下一条sql,这样做,hibernate也会去判断,然后执行与代码一样逻辑的顺序。

    参考博客:hibernate/jpa事务提交执行sql顺序(坑)

    END 2020年4月19日21:55:52

    展开全文
  • SSH框架下,spring的事务中提交时hibernate的sql执行顺序错乱,未按代码顺序实现。 JPA也是。 Hibernate在最终执行SQL语句时,居然是按INSERT, UPDATE, DELETE的顺序执行的,而非按照代码顺序执行! 原因 ...

    SSH框架下,spring的事务中提交时hibernate的sql执行顺序错乱,未按代码顺序实现。 JPA也是。

    Hibernate在最终执行SQL语句时,居然是按INSERT, UPDATE, DELETE的顺序执行的,而非按照代码顺序执行! 

    原因 
    hibernate了性能优化,不会把sql语句直接提交给数据库,而是先放在hibernate的缓存中等事务commit的时候一起提交,为的是利用batch操作提高数据库操作性能。 
    这样就导致sql语句执行的顺序与程序不一致。

    解决办法 
    在需要同步的地方(即按照INSERT, UPDATE, DELETE顺序有可能产生问题的时候;混用JDBC操作的时候),执行session.flush()方案,该方法将缓存中的数据请求立即转换为数据库操作并执行 

    flush就是把sql缓冲区的sql语句发送到数据库去。 

    在大批量数据处理的时候,可能需要分批刷出数据,然后清空缓存,以减少内存占用量。

    我的sql顺序错乱原因:使用了本地的sql,它会绕过hibernate持久化管理的方法,影响业务。

    解决方法: 
    从SQL.xml文件中读取sql执行的方法改为hibernate的执行hql方法

    Session session =  getHibernateTemplate().getSessionFactory().getCurrentSession();
    
    SQLQuery query = session.createSQLQuery(sql);
    return query.list();
    

    改为

    Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
    
    Query query = session.createQuery(hql);
    
    //query.uniqueResult();
    query.list();
    

    hibernate 中createQuery与createSQLQuery两者区别是:

    createQuery: 
    (1)hql语句进行查询 
    (2)hibernate生成的Bean为对象装入list返回

    createSQLQuery 
    (1)sql语句查询 
    (2)以对象数组进行存储。 
    想以hibernate生成的Bean为对象装入list返回,就不是很方便。 
    但是它有这样一个方法可以直接转换对象 
    Query query = session.createSQLQuery(sql).addEntity(XXX.class); 
    XXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean
     

    展开全文
  • SQL顺序列找出断号

    千次阅读 2010-08-23 22:11:00
    在列1 2 3 5 6 7 8 10 11 12 15中找出4,9,13,14

    select id from info

     

    id
    -----------
    1
    2
    3
    5
    6
    7
    8
    10
    11
    12
    15

    (11 行受影响)

     

     

     

     

    方法一:

     

    select (select max(id)+1 from Info where id<a.id) as beginId,(id-1) as endId
    from Info a
    where
    a.id>(select max(id)+1 from Info where id<a.id)

     

     

    beginId     endId
    ----------- -----------
    4           4
    9           9
    13         14

    (3 行受影响)

     

     

     

    方法二:

     

    select beginId,(select min(id)-1 from info where id > beginId) as endId
    from ( 
    select id+1 as beginId from info where id+1 not in (select id from info) and id < (select max(id) from info) 
    ) as t

     

    beginId     endId
    ----------- -----------
    4           4
    9           9
    13          14

    (3 行受影响)

     


     

    说明:

    1、查找结果的两列是断号的区间,如果beginId=endId,则表示缺少该号码,否则表示缺少beginId ~ endId;

    2、如果号码1不存在,区间1 ~ select min(id)-1 from info 将无法找出

     

     

    展开全文
  • SQL执行顺序

    2016-08-16 15:56:09
    SQL执行顺序介绍
  • sql解析顺序

    2014-01-13 19:23:10
    sql解析顺序sql中包含select,from,join,on,where,group by,having,order by的解析顺序
  • 在使用MyBatis的时候,经常需要自己手写SQL,多条件查询的时候很容易只关注条件的拼接,而不注意limit或者group by 的顺序。这里只列出SQL书写顺序,至于执行顺序,可参考SQL语句执行顺序-萌小Q-博客 SQL调优 SELECT...
  • 关于sql和MySQL的语句执行顺序(必看!!!)

    万次阅读 多人点赞 2016-03-29 12:15:09
    目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (3)...
  • SQL语句执行顺序详解

    2020-09-10 06:19:30
    本文给大家介绍SQL语句执行顺序详解,涉及到sql语句执行顺序相关知识,对sql语句执行顺序感兴趣的朋友一起看看吧
  • sql执行顺序大总结

    2013-05-07 11:25:26
    sql执行顺序 全收录
  • Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序
  • sql执行顺序

    千次阅读 2016-07-25 15:21:11
    sql执行顺序 SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后...
  • 【数据库SQL系列】sql语句执行顺序,你理解了吗

    万次阅读 多人点赞 2020-01-13 15:29:00
    1.序言 记得前几年,还是初级的时候,面试官问到,请你讲一下sql语句的执行顺序。当时我以为就是按照sql的关键字排列顺序来执行的。...了解一个sql语句的执行顺序,可以让我们清楚到sql执行时的操作顺序,进...
  • SqlServer中Sql语句的逻辑执行顺序

    千次阅读 多人点赞 2017-12-24 21:42:10
    sqlserver sql执行顺序
  • 数据库SQL执行顺序

    千次阅读 2018-08-03 22:37:11
    数据库中SQL的执行顺序如下: (8)SELECT (9)DISTINCT (11)&lt;Top Num&gt; &lt;select list&gt; (1)FROM [left_table] (3)&lt;join_type&gt; JOIN &lt;right_table&gt; (2...
  • sql语句执行顺序

    万次阅读 多人点赞 2019-06-23 09:18:23
    sql语句定义和执行顺序 摘自《MySQL技术内幕:SQL编程》 sql语句定义的顺序 (1) SELECT (2)DISTINCT<select_list> (3) FROM <left_table> (4) <join_type> JOIN <right_table> (5) ON <...
  • 本文将详细介绍数据库总结--SQL语句执行顺序,需要了解更多的朋友可以参考下
  • SQL Tuning 顺序

    千次阅读 2011-10-18 12:34:07
    ---优化顺序--- 1 按照SP的要求,重新写SQL,达到如下效果:  A 先做Where, 再作笛卡尔积: 可是使用子查询 Or TempTable Or TableVariable实现. 2 添加NC Index: 尽量少添加NC Index,因为它可能导致A查询快
  • SQL不同于与其他编程语言的最明显特征是处理代码的顺序,以下就为大家详细的介绍一下,需要的朋友可以参考下
  • 关于SQL的执行顺序

    2021-01-20 15:16:36
    最近总是在优化公司的旧系统,有很多地方需要进行sql语句优化,把sql语句的执行顺序来好好的分析一下, SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理
  • 一同学去面试,面试官让说一下sql的执行顺序,他尽然答错了,面试也就到此结束了!实属不应该。。。
  • sql查询执行顺序

    万次阅读 2018-11-17 23:32:16
    目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (3) ...
  • sql语句的执行顺序

    万次阅读 多人点赞 2017-01-10 11:09:04
    理解sql语句的执行顺序对优化sql非常重要,那么sql语句的执行顺序是怎样的呢,以一条简单的的语句做分析:  这一条语句包含我们经常用到的一些关键字,select,from,where,group by,order by,它的执行顺序如下...
  • Spark SQL执行流程解析之 sql执行顺序

    千次阅读 2019-08-11 22:57:32
    Spark Sql 关键字执行顺序Sql执行顺序类似: 1.先将from前两表做笛卡尔积加载进来形成虚拟表vt1, 2.on条件后为真的插入虚拟表形成vt2, 如果包含多个表,重复操作, 完成所有数据加载后, 开始对形成的大虚拟表vt2...
  • SQL语句执行顺序说明

    2011-08-02 10:23:08
    关于SQL语句在进入oracle库缓存之后的执行顺序的简析~!
  • [SQL]语法顺序与执行顺序

    万次阅读 2018-08-11 14:59:01
    SQL 语句的执行顺序跟其语句的语法顺序并不一致 一般而言 SQL 语句的语法顺序是: SELECT[DISTINCT] FROM WHERE GROUP BY HAVING UNION ORDER BY 其执行顺序为: FROM ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 427,256
精华内容 170,902
关键字:

sql顺序