一个提交动作要执行两个sql语句:insert into b表... ;update a表 set bid=b表的id主键;
事务控制的语句       public void executeBatchSql(String[] sqls) throws Exception {
SessionFactory sf = HibernateUtil.getSessionFactory();
Session session = sf.getCurrentSession();
Transaction tx = null;
Connection conn = null;
try {
tx = session.beginTransaction();
conn = session.connection();
//PreparedStatement psd = null;

for(int i=0; i<sqls.length; i++)
{
PreparedStatement psd = conn.prepareStatement(sqls[i]);
psd.execute();
psd.close();
}
tx.commit();
}
catch (Exception e) {
e.printStackTrace();
if (tx!=null) {
tx.rollback();
}
if (conn!=null) {
conn.close();
}
throw e;
}
}这边如果要获得主键,上面好像不行吧,请教大家有什么方法。以前遇到这个问题都是用存储过程搞定的,可是有时候参数太多,总不能用存储过程吧

解决方案 »

  1.   

    用原生的jdbc, 会有什么问题
      

  2.   

    String sql="update a set state=1";
    sqls[0]=sql;sql = "insert into b(a_Id)" ;
    sql += "values(?)";
    sqls[1]=sql;
    super.executeBatchSql(sqls);
    这里b表要获得a表的id,怎获得
      

  3.   

    b(a_Id)括号里面用字查询不可以么?
      

  4.   

    第一,没看出来为啥要用hibernate,这个跟jdbc没啥区别
    第二,即便是这么写,你的insert into那个sql语句,没有b表的主键值?
      

  5.   

    公司的框架就是hibernate,哦。代码写反了
    String sql="insert a ...";
    sqls[0]=sql;sql = "update b set a_id=a.id" ;
    sqls[1]=sql;
    super.executeBatchSql(sqls);
      

  6.   


    印象里有个方法返回一个ResultSet 等我帮你查查哦
      

  7.   

    用executeQuery执行记录 然后返回个ResultSet
    第一列就是该记录的ID