hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...
求大神講解下
Hibernate4?中為什么我沒有用commit()方法直接用save就存到數據庫了?
public?class?Main?{
public?static?void?main(String[]?args)?{
SessionFactory?sessionFactory?=?new?Configuration().configure().buildSessionFactory();
Student?student?=?new?Student();
student.setAge(11);
student.setName(“save”);
student.setSex(“男”);
student.setAcademicYear(“99999”);
Session?session?=?sessionFactory.getCurrentSession();
Transaction?ts?=?session.beginTransaction();
session.save(student);
}
}
貌似明白了???只要打印出?sql語句就?執行到數據庫了?
Hibernate:?insert?into?student?(_name,?_age,?_sex,?_academicYear,?_id)?values?(?,??,??,??,??)
我把student.hbm.xml??中的
改為
后
再測試??只save()不commit()就不會對數據庫?操作了
1分
不配置主鍵生成策略會報錯吧???
1分
大家頂起來了啊
一直理解只是主鍵生成策略,為了便于移植底層數據庫才用native的嗎?怎么會和事務有關系
需要測試下
不會報錯呀????我怎么在你留言上回復?
1分
你是getCurrentSession的話自動提交
但是你后面說的那種情況很奇怪,照理說和主鍵木有關系啊
等大神解釋
我測試下?getCurrentSession?改成openSession?試試??謝謝
public?static?void?main(String[]?args)?{
SessionFactory?sessionFactory?=?new?Configuration().configure().buildSessionFactory();
Student?student?=?new?Student();
student.setAge(11);
student.setName(“save”);
student.setSex(“男”);
student.setAcademicYear(“99999”);
//Session?session?=?sessionFactory.getCurrentSession();
Session?session?=?sessionFactory.openSession();
Transaction?ts?=?session.beginTransaction();
//Student?student2?=?(Student)session.load(Student.class,?1);
//System.out.println(student2.getName());
session.save(student);
//ts.commit();
}
貌似不行
_id??_name??_age??_sex??_academicYear
1???save????11????男???99999
還是有數據
1分
Hibernate都到4了,是該學習了
1分
我前幾天用4.1.8??session不是你這樣取的啊!
Session?session?=?HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event?theEvent?=?new?Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
4.1.8?final??文檔里就是上面的寫法啊
怎么在用戶的留言回復呀
1分
去試試了,
43分
你會結貼不呢?
原因是數據源conn默認的提交方式,hibernate封裝的jdbc,因為jdbc默認是的conn提交方式是true
這樣?就應該不能提交了
public?static?void?main(String[]?args)?throws?Exception?{
SessionFactory?sf=HibernateSessionFactory.getSessionFactory();
Session?session=sf.openSession();
System.out.println(session.connection().getAutoCommit());
session.connection().setAutoCommit(false);
User?u=new?User();
u.setName("aaa");
session.save(u);
}
1分
hibernate4?好像變動很大、
要看你hibernate文件是如何配置事務的、
getCurrentSession();這樣獲取的session是就可以不用手動關閉了、
其實跟session有關、
我的猜測是?getCurrentSession()?獲取到了你配置的事務、
最后將數據庫flush到了數據庫中、
以上也都是個人猜測而已、沒有看hibernate4的源碼、只曉得hibernate4相比hibernate3變動挺大的
該結貼?了
總結下??測試的程序
SessionFactory?sessionFactory?=?HibernateUtil.getAnnotationSessionFactory();
Session?session?=?sessionFactory.getCurrentSession();
Transaction?ts?=?session.beginTransaction();
Husband?h1?=?new?Husband();
h1.setName(“w1”);
Wife?w1?=?new?Wife();
w1.setName(“ll”);
h1.setMyWife(w1);
session.save(w1);
session.save(h1);
//session.clear()?在這調用?clear()commit后數據庫有內容說明save?自動提交了
w1.setName(“wwww”);
w1.setName(“qqq”);
//session.clear()?在這里調用clear()不會訪問數據庫?緩存清空了
try{
ts.commit();
}catch(Exception?e){
System.out.println(“回滾”);
ts.rollback();
}
還有?我用了Annotation后??只save()不commit()?數據庫里沒有內容。用xml會有內容??可能是???scottxzj?說的吧???我在試試結貼
session.connection()???在??4.1.8?中已廢除了??郁悶
失誤??沒有結貼?????測試?失敗!
try?{
System.out.println(session.connection().getAutoCommit());
session.connection().setAutoCommit(false);
}?catch?(HibernateException?e1)?{
e1.printStackTrace();
}?catch?(SQLException?e1)?{
e1.printStackTrace();
}
測試結果
false
Hibernate:
insert
into
Wife
(name)
values
(?)
Hibernate:
insert
into
Husband
(myWife_id,?name)
values
(?,??)
我想知道SSH中是怎么管理事物的
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 启动马达接线实物图_东元伺服驱动马达
- 下一篇: mybatis依赖_Spring Boo