openSession需要手动关闭线程,getCurrentSession自动关闭线程
出现了什么异常?
可能你current的代码没改session调用的方法getcurrentSession
一般要改成自己的啊,老师的什么数据库什么其他的跟你不一样啊
第一种方式虽然测试通过了,但是控制台输出的信息和老师的控制台输出的信息不同
5版本导入更换为:
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
在4版本中
Configuration conf = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(conf.getProperties()).buildServiceRegistry();
SessionFactory sf = conf.buildSessionFactory(serviceRegistry);
在5版本的Hibernate中,buildServiceReguistry()方法被替换了,用如下方法:
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
serviceRegistry对象实体通过ServiceRegistryBuilder对象实例的buildServiceRegistry()方法生成,个人感觉生成方法为设计模式中单例模式的应用,因为工程在内存中只需要一份服务注册对象的实体。config为配置类Configuration对象的实例,config.getProperties()方法加载hibernate.cfg.xml文件并通过Dom树技术读取属性,serviceRegistryBuilder对象通过applySettings()应用这些属性, 通过buildServiceRegistry()生成服务注册对象serviceRegistry。以上是我对该行代码的解释,希望可以帮到你
我的是可以的,用的云服务器的数据库。需要加上了远程访问的权限
空指针异常,应该是你程序里面哪个字段没赋值吧
已解决 new Configuration.configure();
已经解决了,忘了@Test
我知道了,我位置放错了,在hibernate.cfg.xml里边属性的排放是有顺序的,我把
<property name="hibernate.current_session_context_class">thread</property>
放在了
<mapping resource="Student.hbm.xml"/>
的前面就运行成功了
了解了,多谢
这些不是错误,只是一些日志信息,
方法出现了初始化错误没有创建,是你额test测试类里的方法,看看你有没有哪里写错,或者是写完没有保存
这个没关系,有些类会在新JDK版本中显示被弃用,但不影响使用
@本地事务和全局事务:
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用 XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互。
本地事务:在单个 EIS 或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。
openSession 每次使用都是打开一个新的session,使用完需要调用close方法关闭session;
getCurrentSession 是获取当前session对象,连续使用多次时,得到的session都是同一个对象,这就是与openSession的区别之一 ;
一般在实际开发中,往往使用getCurrentSession多,因为一般是处理同一个事务,所以在一般情况下比较少使用openSession;