java - confused about Session.persist() and Session.save() - Stack Overflow

i want to know the differenc ebetween the Session.persist(0 and Session.save(),from the search on the n

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 .hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [.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

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 .hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [.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
Share Improve this question asked Mar 23 at 10:45 samhsamh 414 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

save() is deprecated meanwhile and presumably simply calling persist, why your test behaves the same (see https://docs.jboss./hibernate/stable/core/javadocs//hibernate/Session.html#save(java.lang.Object))

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744289547a4566968.html

相关推荐

  • java - confused about Session.persist() and Session.save() - Stack Overflow

    i want to know the differenc ebetween the Session.persist(0 and Session.save(),from the search on the n

    7天前
    30

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信