代码之家  ›  专栏  ›  技术社区  ›  masber

休眠不通过本机查询更新值

  •  0
  • masber  · 技术社区  · 6 年前

    尊敬的StackOverflow社区:

    我不知道为什么下面的代码不更新我的数据库数据,但是从休眠日志中获取查询似乎有效…

    我正在使用Hibernate 5.2.12.决赛

    这是我的全部职能:

        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();
    

    这是Hibernate的日志

    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 回复  |  直到 6 年前
        1
  •  0
  •   masber    6 年前

    Issue was returnAction字段是一个枚举,因此我必须将其转换为字符串。

    奇怪的是,冬眠没有抱怨…

    这就是解决方法:

    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();