首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • hibernate 多线程运行 [已结贴,结贴人:denmarka]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 16:09:21 楼主
    Hibernate1,Hibernate2继承了Threed,实现了run()方法,单独运行hibernate1.start();或hibernate2.start();都可以。同时调用就报错。请教高手解决办法
    public class TestCopyImgHibernate {
    public static void main(String[] args) {
    Hibernate1 hibernate1 = new Hibernate1();
    Hibernate2 hibernate2 = new Hibernate2();

    hibernate1.start();
    hibernate2.start();

    }
    }

    下面是Hibernate1 与Hibernate2相同
    public class Hibernate1 extends Thread{
    public void run() {
    System.out.println("线程1开始");
    Session session1 = null; // 初始化Hibernate
    // session,注意是在org.hibernate包下面的;
    Transaction tx1 = null; // 初始化事务
    List list = new ArrayList();
    // String sql = "select * from image_lob";
    String hql = "select document from Person";// 这是HQL写法,DArea就是我们刚才的POJO
    InputStream is = null;
    // OutputStream os = null;
    try {
    long beginTime = System.currentTimeMillis();
    session1 = HibernateSessionFactory.getSession(); // 获得线程安全的session
    tx1 = session1.beginTransaction(); // 开始事务
    Query query = session1.createQuery(hql); // Hibernate提供的查询接口
    tx1.commit();

    list = query.list();
    System.out.println("LIST大小 " + list.size());
    for (int i = 0; i < list.size(); i++) {
    Blob blob = (Blob) list.get(i);
    is = blob.getBinaryStream();
    byte[] b = new byte[1024];
    is.read(b);
    }
    long endTime = System.currentTimeMillis();
    float sumTime = (float) (endTime - beginTime) / 1000;
    System.out.println("线程1"+sumTime + "秒");
    } catch (Exception e) {
    list = null;
    e.printStackTrace();
    } finally {
    session1.close();
    System.out.println("线程1结束");
    }

    }
    }

    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 19:19:561楼 得分:0
    public class TestCopyImgHibernate  throws Exception {
    public static void main(String[] args) {
    Hibernate1 hibernate1 = new Hibernate1();
    Hibernate2 hibernate2 = new Hibernate2();

    hibernate1.start();
    hibernate1.sleep(1000);
    hibernate2.start();


    }
    }
    //lz照如上改下试下 如果不行在将 时间设置为2000 试下看。
    可能是由于session1.close(); 的时候还没有来得及释放 threadLocal实例所至。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-28 08:55:502楼 得分:0
    还是不行啊 下面是异常

    线程1开始
    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    main线程
    线程2开始
    %%%% Error Creating SessionFactory %%%%
    org.hibernate.MappingException: Could not read mappings from resource: com/aolei/hibernate/Person.hbm.xml
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:485)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1465)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1310)
    at com.aolei.hibernate.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:59)
    at com.aolei.hibernate.HibernateSessionFactory.getSession(HibernateSessionFactory.java:43)
    at com.aolei.manythreed.hibernate.Hibernate2.run(Hibernate2.java:26)
    Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.aolei.hibernate.Person
    at org.hibernate.cfg.Mappings.addClass(Mappings.java:118)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:154)
    at org.hibernate.cfg.Configuration.add(Configuration.java:386)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:427)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:482)
    ... 8 more
    java.lang.NullPointerException
    at com.aolei.manythreed.hibernate.Hibernate2.run(Hibernate2.java:27)
    Exception in thread "Thread-1" java.lang.NullPointerException
    at com.aolei.manythreed.hibernate.Hibernate2.run(Hibernate2.java:71)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-28 09:12:053楼 得分:20
    要不你在
    HibernateSessionFactory  中加一个

    Java code
    public static Session getAnotherSession() throws HibernateException...{ if (sessionFactory == null) ...{ rebuildSessionFactory(); } return sessionFactory.openSession(); }


    这样的方法.
    然后
    session1 = HibernateSessionFactory.getSession();将你获得 session的方法改成上面哪个方法 即  session1 = HibernateSessionFactory.getAnotherSession();
    另一个类也记得改一下
    试下....                                     
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-28 09:21:074楼 得分:0
    Could not read mappings from resource: com/aolei/hibernate/Person.hbm.xml
    这跟线程有P关系, 明明是这个文件有问题嘛
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-28 10:12:165楼 得分:0
    谢谢小熊猫,我知道问题了,是session的问题,把它从finally 中移出来就行了
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved