如何表之间使用了级联,并且hibernate进行了相关配置,那么就不用去获取该条记录的id值。但是如果没有设置关联关系的话,就要考虑了。
比如在A表中插入一条数据,也需要在B表中插入相关的信息,这个时候就需要知道插入A表的一条记录的id值了(如果你使用id值进行模拟关联 关系的话且id都是自增的)
此时:如果hibernate没有对事务进行控制,即没有commit之前获取该条记录的id值,就需要使用PreparedStatement的对象的getGeneratedKeys()方法获取最后插入记录的自增id值。
String sql =
"INSERT INTO users (username,password) VALUES (?,?);"
;
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.setString(
1
, user.getUsername());
ps.setString(
2
, user.getPassword());
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
int
id = rs.next().getInt(
1
);
但是,如果控制了事务(commit之后),直接就可以获取了
xx.save(a);
//commit;
int id = a.getId();
当然,mysql中也有相关的语法来获取:select last_insert_id();