我执行了一个save方法之后为什么会输出两句hibernate语句呢?  
Hibernate: select max(ACCOUNT_ID) from account
Hibernate: insert into financing.account (ACCOUNT_MONEY, ACCOUNT_TYPE, ACCOUNT_NOTE, ACCOUNT_DATE, ACCOUNT_NAME, USER_ID, ACCOUNT_ID) values (?, ?, ?, ?, ?, ?, ?)
为什么会有第一句呢?

解决方案 »

  1.   

    那要看你主体怎么用了,
    比如:你保存了一个对象,但是在commit之前你又获得这个对象的size 或是取一个值。
    那就会多出现一条语句。具体原因还是还是hibernate的持久化操作了。
      

  2.   

    表之间有关联吧
    帖你的配置文件出来看看
    另外你调用的是saveOrUpdate()还是save()方法?
      

  3.   

    这个应该是你的主键生成策略的问题吧
    他先查询出你当前最大ID
    插入数据的时候保证ID不重复
      

  4.   

    你的hbm.xml的主键生成方式是不是increment?是的话就会那样,它会先查你数据库主键的最大值
      

  5.   

    hbm.xml的主键生成方式是increment造成的,
    让hibernate自动管理主键,比较省事
    但是这种方式不能用在分布式数据库上
      

  6.   


    楼上正解,你的主键是自动生成的,所以会出现两条SQL语句。第一条用于查询出最大的ID主键。建议采用序列或是自己(不是自动,设置主键生成方式)加1的方式!