Не удается обновить любой атрибут в testUpdateBookOrdersShippingAddress - PullRequest
0 голосов
/ 23 мая 2019

У меня проблема с обновлением BookOrder.BookOrder подключен к DetailOrder через составной ключ в соответствии со многими ко многим.

Ошибка показана ниже.

May 23, 2019 2:33:48 PM com.mchange.v2.c3p0.impl.NewPooledConnection 
INFO: [c3p0] Exceptions occurred while trying to close a PooledConnection's resources normally.
May 23, 2019 2:33:48 PM com.mchange.v2.c3p0.impl.NewPooledConnection 
INFO: [c3p0] NewPooledConnection close Exception.
java.sql.SQLException: ORA-03106: fatal two-task communication protocol error

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:441)
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:436)
    at oracle.jdbc.driver.T4C7Ocommoncall.processError(T4C7Ocommoncall.java:86)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252)
    at oracle.jdbc.driver.T4C7Ocommoncall.doOLOGOFF(T4C7Ocommoncall.java:62)
    at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:908)
    at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:2005)
    at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:642)
    at com.mchange.v2.c3p0.impl.NewPooledConnection.closeMaybeCheckedOut(NewPooledConnection.java:255)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:622)
    at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:1076)
    at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1101)
    at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1062)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$100(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$5.run(BasicResourcePool.java:1316)

May 23, 2019 2:33:48 PM com.mchange.v2.resourcepool.BasicResourcePool 
WARNING: Failed to destroy resource: com.mchange.v2.c3p0.impl.NewPooledConnection@3dd18dc6
java.sql.SQLException: Some resources failed to close properly while closing com.mchange.v2.c3p0.impl.NewPooledConnection@3dd18dc6
    at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:664)
    at com.mchange.v2.c3p0.impl.NewPooledConnection.closeMaybeCheckedOut(NewPooledConnection.java:255)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:622)
    at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:1076)
    at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1101)
    at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1062)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$100(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$5.run(BasicResourcePool.java:1316)

Я думаю, что может быть проблема с сеансом.Сессия может быть автоматически закрыта при необходимости открытия.

Мой тестовый класс

@Test
    public void testUpdateBookOrdersShippingAddress() {
        Integer orderId = 48;
        BookOrders bookorders = ordersDAO.get(orderId);

        System.out.println("Update Before (ShippingAddress) : " + bookorders.getShippingAddress());

        bookorders.setShippingAddress("New Home Shipping Address");

        try {
            ordersDAO.update(bookorders);
        } catch (Exception e) {
            e.printStackTrace();
        }


        BookOrders updatedOrder = ordersDAO.get(orderId);

        System.out.println("Update After (ShippingAddress) : " + updatedOrder.getShippingAddress() );

        assertEquals(bookorders.getShippingAddress(), updatedOrder.getShippingAddress());

    }

Hibernate Класс для метода get и update.

public T update(T t) {

        Session session = sessionFactory.openSession();
        Transaction transaction = null;
        try {
            transaction = session.beginTransaction();

            session.merge(t);
            session.flush();
            session.getTransaction().commit();
            session.close();

        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            transaction.rollback();
        }

        return t; 
    }

    public T get(Class<T> type,Object id) {

        Session session = sessionFactory.openSession();
        Transaction transaction = null;
        T t = null;
        try {
            transaction = session.beginTransaction();

            t = session.get(type, (int)id);
            session.flush();
            session.getTransaction().commit();
            session.close();

        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            transaction.rollback();
        }

        return t; 
    }

1 Ответ

0 голосов
/ 23 мая 2019

В функции обновления класса hibernate, основанного на универсальном типе, я мог бы использовать session.update(t); вместо session.merge(t); and I could solve it.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...