Transaction Session 问题求助!

HibernateUtil.java
*

  • @author Tyler
    */
    public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
    try {
    // Create the SessionFactory from standard (hibernate.cfg.xml)
    // config file.
    Configuration configuration = new Configuration().configure();

    ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()

    .applySettings(configuration.getProperties()).build();

    sessionFactory = configuration

    .buildSessionFactory(serviceRegistry);

    // return sessionFactory;
    } catch (Throwable ex) {
    // Log the exception.
    System.err.println("Initial SessionFactory creation failed." + ex);
    throw new ExceptionInInitializerError(ex);
    }
    }

    public static SessionFactory getSessionFactory() {
    return sessionFactory;
    }

    }

    //查询
    private List criteriaIUL_get(String key) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    // Query q = session.createQuery(UI_BaseOnEquipmentId);
    Criteria criteria = session.createCriteria(InfosysUserInfo.class);
    Criterion criterion;
    switch (key.length()) {
    case 5:
    criterion = Restrictions.eq("equipmentId", key);
    break;
    case 11:
    criterion = Restrictions.or(Restrictions.eq("phone1", key), Restrictions.eq("phone2", key));
    break;
    default:
    criterion = null;
    break;
    }
    if (criterion == null) {
    return null;
    }
    criteria.add(criterion);
    List resultList = criteria.list();
    session.getTransaction().commit();
    return resultList;
    }
    -------------------------------------
    hibernate.cfg.xml

thread
第一次事务没有问题,第二次查询时出现:(这是什么问题)
Exception in thread "AWT-EventQueue-0" org.hibernate.TransactionException: nested transactions not supported
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:154)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1435)
at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:356)
at com.sun.proxy.$Proxy0.beginTransaction(Unknown Source)
at frame.JFrameMain.criteriaIUL_get(JFrameMain.java:51)
at frame.JFrameMain.jBqueryUserMouseClicked(JFrameMain.java:617)
at frame.JFrameMain.access$12(JFrameMain.java:615)
at frame.JFrameMain$13.mouseClicked(JFrameMain.java:507)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

这是没有关闭的原因嘛?

getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭
你是不是代码异常了, 没有commit? 比如 criterion 为空你直接返回了?

http://zhidao.baidu.com/link?url=KNGwETB5nm1-qRwtaN81SRU0131FHrTOVXV5x2ymvjFBe_KCC4D82Chlpgol1L9BE6i2wnl6rVl6ccRUoz7O2a