i want to know the differenc ebetween the Session.persist(0 and Session.save(),from the search on the net the community says that the persist() dont actually make any immediate request to the database untill flushing or committing but in the other hand save() when the primary key is auto-generated by the database its executing it immediatly haah but the plot twist is that from the test above it seems that they behave the same: the code:
@Transactional
@Repository
@EnableTransactionManagement
class myclass{
@Autowired
SessionFactory sf;
@Transactional
public List<Object> list(ApplicationContext ctx){
Session session=sf.getCurrentSession();
Query query=session.createQuery("select i from ilyass i");
List<Object> list=query.getResultList();
return list;
}
public ilyass save(ilyass ily)throws InterruptedException {
Session session=sf.getCurrentSession();
session.persist(ily);
for(int i=0;i<10;i++){
System.out.println("iliawait!");
Thread.sleep(2000);
}
System.out.println("ID:+ "+ily.id);
return ily;
}
public Saiidd saveSaid(Saiidd ily)throws InterruptedException{
Session session=sf.getCurrentSession();
session.persist(ily);
for(int i=0;i<10;i++){
System.out.println("sawait!");
Thread.sleep(2000);
}
System.out.println("ID:+ "+ily.it);
return ily;
}
}
the demo:
AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(demo.class);
ilyass ilias=new ilyass();
ilias.name="af";
Saiidd said=new Saiidd();
said.username="az";
said.it=229;
myclass mydao=ctx.getBean(myclass.class);
mydao.save(ilias);
System.out.println("id: "+ilias.id);
mydao.saveSaid(said);
System.out.println("id: "+said.it);
=> the results:
=>
Hibernate:
/* insert entities.ilyass
*/ insert
into
ilyass
(id, name)
values
(default, ?)
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
ID:+ 30
id: 30
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
ID:+ 229
Hibernate:
/* insert entities.Saiidd
*/ insert
into
Saiidd
(username, it)
values
(?, ?)
id: 229
=> testing the save() method
@Transactional
@Repository
@EnableTransactionManagement
class myclass{
@Autowired
SessionFactory sf;
@Transactional
public List<Object> list(ApplicationContext ctx){
Session session=sf.getCurrentSession();
Query query=session.createQuery("select i from ilyass i");
List<Object> list=query.getResultList();
return list;
}
public ilyass save(ilyass ily)throws InterruptedException {
Session session=sf.getCurrentSession();
session.persist(ily);
for(int i=0;i<10;i++){
System.out.println("iliawait!");
Thread.sleep(2000);
}
System.out.println("ID:+ "+ily.id);
return ily;
}
public Saiidd saveSaid(Saiidd ily)throws InterruptedException{
Session session=sf.getCurrentSession();
session.save(ily);
for(int i=0;i<10;i++){
System.out.println("sawait!");
Thread.sleep(2000);
}
System.out.println("ID:+ "+ily.it);
return ily;
}
}
the same demo code used
the result:
Mar 23, 2025 6:41:38 AM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate:
/* insert entities.ilyass
*/ insert
into
ilyass
(id, name)
values
(default, ?)
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
iliawait!
ID:+ 32
id: 32
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
sawait!
ID:+ 228
Hibernate:
/* insert entities.Saiidd
*/ insert
into
Saiidd
(username, it)
values
(?, ?)
id: 228
save()
is deprecated meanwhile and presumably simply calling persist, why your test behaves the same (see https://docs.jboss.org/hibernate/stable/core/javadocs/org/hibernate/Session.html#save(java.lang.Object))