Как внутренне Hibernate установить сгенерированный идентификатор (первичный ключ), который находится в базе данных, в сохраненный объект? - PullRequest
2 голосов
/ 13 марта 2019

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

Здесь мой вопрос заключается в том, что перед сохранением объекта мы получаем o / p для System.out.println (st.getsId ()); равен 0, что является значением по умолчанию для int. После сохранения объекта в базе данных, т.е. s.save (st); возвращает сгенерированный идентификатор вставленной строки. Я хочу знать, что после сохранения того, как объект, т. Е. Имеет сгенерированный идентификатор, является спящий режим, устанавливающий значение sId для этого объекта, т. Е. St? Как hibernate узнает сгенерированное значение id, которое находится в базе данных? Существует ли какой-либо поток данных между hibernate и базой данных для получения сгенерированного значения, если это то, как происходит поток данных между Hibernate и базой данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...