Hibernate не обновляет значения через собственный запрос

Manuel Sopena Ballesteros спросил: 28 апреля 2018 в 08:31 в: mysql

Дорогое сообщество stackoverflow,

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

Я использую Hibernate 5.2.12.Final

Это моя целая функция:

    EntityManager em = Utils.initEntityManager();
    em.getTransaction().begin();    em.persist(receptacle);    em.createNativeQuery("UPDATE product_item pi"
            + " JOIN ereturn er ON pi.ereturn = er.id "
            + "SET pi.receptacle = :receptacle "
            + "WHERE pi.returnAction = :returnAction "
            + "AND er.destination = :destination "
            + "AND er.status = 'RECEIVED'")
            .setParameter("receptacle", receptacle.getId())
            .setParameter("returnAction", receptacle.getReturnAction())
            .setParameter("destination", receptacle.getDestination().getId())
            .executeUpdate();           em.getTransaction().commit();
    em.close();

И это журнал из спящего режима

19:47:29,048 DEBUG [org.hibernate.SQL] - 
    UPDATE
        product_item pi 
    JOIN
        ereturn er 
            ON pi.ereturn = er.id 
    SET
        pi.receptacle = ? 
    WHERE
        pi.returnAction = ? 
        AND er.destination = ? 
        AND er.status = 'RECEIVED'
Hibernate: 
    UPDATE
        product_item pi 
    JOIN
        ereturn er 
            ON pi.ereturn = er.id 
    SET
        pi.receptacle = ? 
    WHERE
        pi.returnAction = ? 
        AND er.destination = ? 
        AND er.status = 'RECEIVED'
19:47:29,049 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [1] as [BIGINT] - [20]
19:47:29,049 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [3] as [BIGINT] - [148375]
19:47:29,049 TRACE [org.hibernate.type.descriptor.sql.BasicBinder] - binding parameter [2] as [VARBINARY] - [RETURNTOCLIENT]

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

ВОПРОС: почему mysql не меняет никаких данных когда выполняется запрос на обновление выше?

Большое спасибо

1 ответ

Есть решение
Manuel Sopena Ballesteros ответил: 28 апреля 2018 в 09:27

проблема была в поле returnAction - это перечисление, поэтому мне нужно преобразовать его в String.

Странно, что спящий режим не жаловался ...

Это исправление:

em.createNativeQuery("UPDATE product_item pi"
            + " JOIN ereturn er ON pi.ereturn = er.id "
            + "SET pi.receptacle = :receptacle "
            + "WHERE pi.returnAction = :returnAction "
            + "AND er.destination = :destination "
            + "AND er.status = 'RECEIVED'")
            .setParameter("receptacle", receptacle.getId())
            .setParameter("returnAction", receptacle.getReturnAction().toString())
            .setParameter("destination", receptacle.getDestination().getId())
            .executeUpdate();