刷新后看不到更新记录

问题描述 投票:0回答:1

从glassfish3到payara5的一段代码停止唤醒。我们的代码将日期保存到一组记录中,然后选择那些更新的记录。在glassfish3中无缝运行,在payara5中,select不返回任何记录(似乎在另一笔交易中确实起作用)。如果结果不同,则抛出异常,因此永远不会保存数据。交易范围为READ_COMMITTED

            try {
                String whereClause = " where "
                    + "em.mailboxToBeUsed =:mailbox "
                    + "and em.lastSendResult is null "
                    + "and (em.errorsNumber is null or em.errorsNumber<4) ";

                Query updateQuery = em.createQuery("update EmailTobeSended em "
                    + "set em.trysendsince=:dat " + whereClause);

                updateQuery.setParameter("mailbox", mb);
                updateQuery.setParameter("dat", key);

                int modificate = updateQuery.executeUpdate();
                em.flush();
                TypedQuery<EmailTobeSended> emlocksel = em.createQuery(
                    "select em from EmailTobeSended em WHERE em.mailboxToBeUsed =:mailbox AND "
                    + "em.trysendsince=:dat "
                    + " order by em.emailId ", EmailTobeSended.class);
                emlocksel.setParameter("mailbox", mb);
                emlocksel.setParameter("dat", key);

                res = emlocksel.getResultList();
                if (modificate != res.size()) {
                    throw new java.lang.AssertionError("Lock error on select emailtobesended");
                }

            } catch (Exception ex) {
                gotError = true;
                res = null;
            }

在glassfish3上,刷新后,第二个查询找出更新的记录。在payara5上没有结果

编辑


我们使用eclipselink

java jpa eclipselink payara
1个回答
0
投票

我们解决了这个问题:这与持久性无关,而与mysql版本有关(从5.5到5.6)在两个版本之间,DATE字段的解释有所不同:忽略5.5毫秒,考虑5.6。由于未将字段配置为接受毫秒,因此不保存日期就保存了日期,因此在第二个查询(选择)中,比较结果以“ .000”(毫秒)回答,与搜索的结果不同将字段更新为DATE(3)解决了问题

© www.soinside.com 2019 - 2024. All rights reserved.