JDBC里的return_generated_keys问题,在SSH整合框架中怎么解决??
代码如下:
String sql="insert into article values([color=darkred]null,0,?,?,?,now(),0[/color])";
conn=DB.getConn();
conn.setAutoCommit(false);
[color=darkred] [b]pstmt=DB.prepareStmt(conn, sql,Statement.RETURN_GENERATED_KEYS);[/b][/color]
pstmt.setInt(1, rootId);
pstmt.setString(2, t.getTitle());
pstmt.setString(3, t.getCont());
pstmt.executeUpdate();
ResultSet rsKeys=[color=darkred]pstmt.getGeneratedKeys()[/color];
if(rsKeys.next()){
rootId=rsKeys.getInt(1);
}
stmt=DB.createStmt(conn);
stmt.executeUpdate("update article set rootid="+rootId+" where id="+rootId);
conn.commit();
注:这是一个BBS项目,数据库article表:
id auto_increment,
pid, //被回复帖子的ID
rootid, //根帖ID 就是主题ID
title,
cont,
pdate,
isleaf
大家看的懂吧??我想插入一条BBS根主题,那么他的rootid就应该是他自己的id,而id 又是auto_increment的。。这项目要用SSH框架整合的话,这问题怎么解决???
这项目要用SSH框架整合的话,这问题怎么解决??? 一条搞不定 (可以写触发器 但麻烦)
既然这样让rootid = 0 为根 不是更简单? 这样查主题贴就是rootid=0的
Statement.RETURN_GENERATED_KEYS这玩意在hibernate中是需要配置的,需要设置属性:
hibernate.jdbc.use_get_generated_keys=true(默认为false)
这样配置之后,就通过PreparedStatement.getGeneratedKeys()生成主键。
你的这段语句,在hibernate中,首先按照上面配置,然后再通过po对象(即Article)获得这个id值,然后在根据id值写hql语句更新
既然都可以判断是否是根贴了,那不设就是了。
只是那列该不会有 not null 制约吧?
而且后续的逻辑都要改,rootid=null时,使用id。
这个主意,有待商榷...
sessionFactory.getCurrentSession().save(t);
//这个时候t的id字段已经有值了,就是刚刚保存时产生的id值
所以后面直接通过t.getId()就能取到值了