Hibernate数据库机制测试(一)
来源:互联网 发布:java初级学生管理系统 编辑:程序博客网 时间:2024/05/20 20:22
在最近的一次面试过程中,被人问到Session究竟是如何处理多线程时,整个人就完全思密达了.之前就是把Hibernate当成一个减少SQL节省成本的工具,之前的系统都没有要求高并发处理要求,并没有关注 这一块.
首先,我编写了一段hibernate普通的数据库测试代码,方法见官方文档官方文档.自从hibernate4开始,我们就可以不在数据库中手动建表,而直接将hibernate的映射配置文件完成后由hibernate自行产生建表sql,自动建立所需要的数据库表.
按照官方的文档步骤,非常幸运,无法正常执行,失败了.所报的错误为: Caused by:org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set.经过多方查找,最终找到解决方法.
将其中建立SessionFactory的代码稍作修改,传人hibernate.cfg.xml的配置信息.即可正常运行.
return cfg.buildSessionFactory(new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build());运行完成后数据库中情况三张表格建立完成,并且正常插入了数据.
假设有两个操作op1和op2,这两次操作先后读取同一条数据,然后op1修改了数据并将数据写回数据库,如果op2也修改了数据,并能够写回到数据库,就会发生op2覆盖了op1的更新数据.那么实际上hibernate会不会允许这样发生呢?我们的测试代码如下:
public static void main(String[] args) { EventManager mgr = new EventManager(); if(args[0].equals("op1")){ mgr.op1(); }else{ mgr.op2(); } HibernateUtil.getSessionFactory().close();}
private void op2() {System.out.println("op2 is running!");SessionFactory sf = HibernateUtil.getSessionFactory();Session session = sf.getCurrentSession(); session.beginTransaction(); Event e = (Event) session.load(Event.class, 1L);System.out.println(e.getTitle());try {Thread.sleep(1000);} catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}e.setTitle("change by op2"); session.getTransaction().commit();}private void op1() {System.out.println("op1 is running!");SessionFactory sf = HibernateUtil.getSessionFactory();Session session = sf.getCurrentSession(); session.beginTransaction(); Event e = (Event) session.load(Event.class, 1L); System.out.println(e.getTitle()); try {Thread.sleep(10000);} catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} e.setTitle("change by op1"); session.getTransaction().commit();}传人不同的运行参数,会启动两个java实例,运行结果是只有先提交的那个事务可以成功,而后提交的事务无法提交到数据库.
0 0
- Hibernate数据库机制测试(一)
- hibernate缓存机制(一)
- Hibernate测试程序---Hibernate操作数据库
- 数据库测试(一)
- 测试Hibernate连接数据库的测试代码
- 测试Hibernate连接数据库的测试代码
- Hibernate 线程,数据操作锁机制测试
- hibernate之数据库隔离机制与锁
- JPA Hibernate 和数据库 的 锁机制
- hibernate缓存机制(一)-n+1问题
- hibernate的缓存机制(一)
- 参考答案-数据库原理测试一
- JMeter 数据库压力测试(一)
- 用HSQLDB数据库测试Hibernate和Spring
- 测试Hibernate连接数据库是否成功
- hibernate Annotation(注解映射)测试一
- 错误记录(一)hibernate小测试
- hibernate操作数据库,初学例子一
- EventQueue事件
- <高质量C>C函数设计基础(一)
- java.lang.instument包超详解
- spring-security3 配置和使用
- 用户研究三部曲:有关用户研究的战略思考
- Hibernate数据库机制测试(一)
- xshell界面变透明
- 关于System.out.print();的滥用
- 职场“潜”规则:心法和技法
- Java排序之插入排序
- jbpm工作流之简单请假流程例子(源码)
- 用 netstat 命令,分析网络连接情况
- C#中使用lockbits方法处理图像(译文)
- 矩阵运算 【微软面试100题 第四十五题】