数据库端和应用程序端的自动增量字段内部发生了什么



>我有一个弹簧应用的豆子

@Entity
@Table(name="tbl_apply_leave")
public class ApplyLeaveModel{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int dbid;
private String employee_name;

public int getDbid() {
    return dbid;
}
public void setDbid(int dbid) {
    this.dbid = dbid;
}
public String getEmployee_name() {
    return employee_name;
}
public void setEmployee_name(String employee_name) {
    this.employee_name = employee_name;
}

}

则在保存此对象 dbid 之前的控制器中为 null。但是在使用休眠保存对象后,dbid包含值。我不知道发生了什么。

控制器代码为:


     System.out.println(applyLeaveModel.getDbid()); // null
     leave_dao.saveApplyLeaveModel(applyLeaveModel);
     System.out.println(applyLeaveModel.getDbid()); // 5

   public void saveApplyLeaveModel(ApplyLeaveModel applyLeaveModel) {
            Session session = null;
            Transaction trans_obj = null;
            try {
                session = sessionFactory.openSession();
                if (session.isOpen() && session != null) {
                    trans_obj = session.beginTransaction();
                    session.persist(applyLeaveModel);
                } 
            } catch (Exception e) {
                System.out.println("save ApplyLeaveModel session " + e);
            } finally {
                trans_obj.commit();
                session.close();
            }
        }

Hibernate执行PreparedStatement.getGeneratedKeys()以在插入后获取生成的id。

还相关: hibernate.jdbc.use_get_generated_keys .

旁注:Java 中的基元类型不能具有null值。可能你的意思是0,或者 id 的类型是 Integer

最新更新