Java 创建/更新/删除时必须开始事务吗?

Java 创建/更新/删除时必须开始事务吗?,java,hibernate,Java,Hibernate,我在hello world学习hibernate的程序中有以下代码 Configuration cfg=new Configuration(); cfg.configure("hibernate.cfg.xml"); SessionFactory factory = cfg.buildSessionFactory(); Session session = factory.openSession(); Transaction tx = session.beginTransaction();/

我在hello world学习hibernate的程序中有以下代码

Configuration cfg=new Configuration();
cfg.configure("hibernate.cfg.xml");

SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();

Transaction  tx = session.beginTransaction();// line1
College college= new College();
session.saveOrUpdate(college);
tx.commit();//line2
session.close();
factory.close();
上面的代码成功地将学院实体保存在DB中,但如果我删除第1行和第2行, 事实并非如此。创建/更新/删除时是否必须开始事务

如果是,在另一个应用程序中,我看到

会话.更新(实体)

无需开始/结束事务即可成功工作。 我只是在session.update(实体)之后看到session.flush() 我不知道为什么它在一个没有交易边界的地方工作,而在另一个地方却不工作

更新:-

根据RADIM的回答,我在下面尝试了

Configuration cfg=new Configuration();
cfg.configure("hibernate.cfg.xml");

SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();

College college= new College();
session.saveOrUpdate(college);
session.flush();
session.close();
factory.close();

但它也没有把学院留在DB中

好的是,没有什么特别或令人惊讶的事情。
Just-如果不使用显式事务,则将使用每个分离的写入操作的隐式事务

无显式事务开始()提交():
session.flush()
将按预期执行每个写入操作。每项更改都将被保留或不保留。不会将其视为一批操作。
但结果却出乎意料。有些WRITE语句可能会失败,有些则会成功。不是我们想要的

与显式交易:
如果没有错误,所有写语句都将成功,否则所有写语句都将失败。
事实上,这应该被标记为唯一的预期行为

当然,尽管写操作即使在没有显式事务的情况下也能工作,这并不令人惊讶,但我们并不建议使用这种方法

建议:我们应该使用显式事务,以确保
会话.flush()
将以一致的DB状态结束