Java Hibernate如何将数据库中生成的ID(主键)设置到保存的对象中?

Java Hibernate如何将数据库中生成的ID(主键)设置到保存的对象中?,java,database,hibernate,Java,Database,Hibernate,POJO类: package com.hibernate.POJO; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Entity; @Enti

POJO类:

package com.hibernate.POJO;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Entity;

@Entity
@Table(name="Student")
public class Student {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
private int sId;
@Column(name="NAME")
private String sName;

public Student(){
}

public int getsId() {
    return sId;
}
public void setsId(int sId) {
    this.sId = sId;
}
public String getsName() {
    return sName;
}
public void setsName(String sName) {
    this.sName = sName;
}
}
测试等级:

package com.hibernate.Test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.hibernate.POJO.Student;

public class Client {
public static void main(String[] args) {
    Student st=new Student();
    st.setsName("Bishal");
    Configuration cfg=new Configuration();
    cfg.configure("hibernate.cfg.xml");
    SessionFactory sf=cfg.buildSessionFactory();
    Session s=sf.openSession();
    System.out.println(st.getsId());//Here the O/P is 0
    s.save(st);
    System.out.println(st.getsId());//Here the O/P is value of Generated ID
    s.beginTransaction().commit();
}
}
控制台:

0
Hibernate: insert into Student (NAME) values (?)
1

这里我的问题是,在保存对象之前,我们要获取System.out.println(st.getsId())的o/p;是0,这是将对象保存到数据库后int的默认值,即s.save(st);返回插入行的生成id。我想知道,在保存对象(即st)如何生成id后,hibernate是否为该对象(即st)设置sId值?hibernate如何知道数据库中生成的id值?hibernate和数据库之间是否有任何数据流来获取生成的值,如果是,那么hibernate和数据库之间的数据流是如何发生的?

请参阅我的问题不是如何从数据库检索自动生成的id值。我的问题是hibernate如何从数据库自动获取生成的id值,以及何时以及如何将该id设置到保存的对象中@ElliottFrisch通过我指定的JDBC api。它通过指定的JDBC api检索自动生成的id值,并使用此函数调用
setId()
方法value@ThomasKläger您想说的是,在数据库中插入行之后,Hibernate使用JDBCAPI并调用setId()方法在内部使用生成的id,而不执行任何额外的查询来获取生成的id值。hibernate是否通过JDBC API调用getGeneratedKeys()方法来获取生成的id值?