999yzc亚洲城在线娱乐城Hibernate中清除历久化形状东西生效

( 999yzc亚洲城在线娱乐城 )

调用session.clear()或许session.evict(obj)皆无法清除Hibernate中的历久化形状的东西

如今已知的情况是:

  1. 当主键运用identify战略时,session.save(person)调用完成后会收回INSERT语句

  2. 当主键运用increment战略时,不会收回INSERT语句,并且后果与预期分歧

代码如下:

@Test
public void test1(){
    Session session = sessionFactory.openSession();
    Transaction transaction = session.beginTransaction();
    
    Person person = new Person();
    person.setName("tom888");
    session.save(person);    //此处能否收回**INSERT**语句与主键战略有关
    
    session.evict(person);
//  session.clear();
    transaction.commit();
    session.close();
}

主键运用identify战略时,代码实行后果:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into Person (name, description) values (?, ?)

我等待的后果应该是数据不该该有任何变革才对,也不该该实行任何SQL语句,由于我调用了session.clear()或许session.evict(obj)时,person应该由历久化形状转为游离形状,等待您的答复!

经过一番学习找到了题目地点,那就自问自答吧,盼望能帮到其他正在学习的冤家。
缘由:这个题目是由历久化类中的XXX.hbm.xml定义的id天生器战略引发的,自己在此处运用了identity战略,运用此战略会使得session.save()办法在失掉实行时立即收回INSERT语句,此时东西无论处于任何形状都不会影响此东西对数据库的更新。
处理办法:id天生器战略运用非依赖数据库发生主键的战略即可。

概况请反省我的分析:Hibernate中由主键战略惹起的session.evict()和session.clear()生效假象题目分析

(看完/读完)这篇文章有何感想! 999yzc亚洲城在线娱乐城的分享…

发表评论

电子邮件地址不会被公开。 必填项已用*标注