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