【发布时间】:2019-03-05 05:32:37
【问题描述】:
如果我使用 getCurrentSession() 来获取会话并且我没有开始事务并保存会给出异常但是当我使用 openSession() 来获取会话时,那么在相同的场景中程序运行没有任何异常。“hibernate.current_session_context_class”在hibernate配置文件中配置了线程。那么我使用getCurrentSession()和openSession()有什么区别。
Here is the code that gets session using getCurrentSession()-
public static void main(String ar[])
{
SessionFactory sfac=null;
sfac=new Configuration().configure("hibernateconfig/rs.xml")
.buildSessionFactory();
try {
Session session=sfac.getCurrentSession();
Student stu=new Student();
stu.setFirstName("abc23");
stu.setLastName("xyz");
System.out.println("-------------"+stu);
session.save(stu);
}
catch(Exception e)
{
System.out.println(e);
}
}
output-
-------------Student [id=0, firstName=abc23, lastName=xyz]
org.hibernate.HibernateException: save is not valid without active transaction
Here is the code that gets session using openSession()-
public static void main(String ar[])
{
SessionFactory sfac=null;
sfac=new Configuration().configure("hibernateconfig/rs.xml")
.buildSessionFactory();
try {
Session session=sfac.openSession();
Student stu=new Student();
stu.setFirstName("abc23");
stu.setLastName("xyz");
System.out.println("-------------"+stu);
session.save(stu);
}
catch(Exception e)
{
System.out.println(e);
}
}
output-
-------------Student [id=0, firstName=abc23, lastName=xyz]
Hibernate:
insert
into
student
(firstName, lastName)
values
(?, ?)
【问题讨论】: