Java 以不同方式管理的调试模式事务
我想从带有特定sql语句的列表中删除对象。 示例:包含消息列表的档案 我希望删除邮件后,列表会自动刷新。情况确实如此,但当我使用远程Java应用程序启动应用程序时,我必须使用实体管理器手动刷新档案。我想知道为什么在调试代码时会有这样的差异 我使用weblogic作为应用服务器 谢谢Java 以不同方式管理的调试模式事务,java,entitymanager,Java,Entitymanager,我想从带有特定sql语句的列表中删除对象。 示例:包含消息列表的档案 我希望删除邮件后,列表会自动刷新。情况确实如此,但当我使用远程Java应用程序启动应用程序时,我必须使用实体管理器手动刷新档案。我想知道为什么在调试代码时会有这样的差异 我使用weblogic作为应用服务器 谢谢 BenefitDossier dossier = dossierRepo.getDossierByDossierId(dossierIdentifier, CREATED); // perform the remo
BenefitDossier dossier = dossierRepo.getDossierByDossierId(dossierIdentifier, CREATED);
// perform the removing
messageRepository.removeOrUpdateMessagesFromDossier(dossier.getDossierId(), COMPLETENESS_RECOGNITION);
dossierRepo.refresh(dossier); // need to add this statement only in debug mode
return dossier;
@PersistenceContext(unitName = "dmb-jta")
protected EntityManager em;
public void removeOrUpdateMessagesFromDossier(DisBenMessageCategory category, String dossierNr) {
if (category.preserveHistory()) {
updateMessagesRemovalTimestamp(category, dossierNr);
} else {
removeMessages(category, dossierNr);
}
}
private void removeMessages(DisBenMessageCategory category, String dossierNr) {
StringBuilder updateStmt = new StringBuilder();
updateStmt.append("DELETE FROM DisBenMessage msg ");
updateStmt.append("WHERE msg.benefitDossier.dossierId = :dossierNr ");
updateStmt.append("AND msg.category = :category ");
Query query = em.createQuery(updateStmt.toString());
query.setParameter("dossierNr", dossierNr);
query.setParameter("category", category);
int updateCount = query.executeUpdate();
LOG.debug("Deleted " + updateCount + " messages.");
}
<persistence-unit name="dmb-jta" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/DisabilityBenefitsDS</jta-data-source>
<properties>
<property name="eclipselink.logging.level" value="INFO"/>
<property name="eclipselink.logging.exceptions" value="true"/>
<property name="eclipselink.logging.logger" value="be.cm.comps.logman.impl.LogManagerSessionLog"/>
<property name="eclipselink.target-server" value="Weblogic_10"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.cache.shared.default" value="false" />
<!-- Global eclipselink Cache -->
<property name="eclipselink.cache.type.default" value="NONE" />
<!-- Specific Entities eclipselink Cache -->
<property name="eclipselink.cache.type.ContactInfoType" value="Full" />
<property name="eclipselink.cache.type.ContactPointServiceType" value="Full" />
<property name="eclipselink.cache.type.Day" value="Full" />
<property name="eclipselink.cache.type.Federation" value="Full" />
<property name="eclipselink.cache.type.Language" value="Full" />
</properties>
</persistence-unit>
你能完全分享你的代码吗?这段代码很难说什么。希望它能帮助理解,谢谢。如果你禁用所有断点,这种情况还会发生吗?@farrellmr确实,当我禁用断点时,档案会很好地刷新。当应用程序服务器必须在断点处停止太长时间时,会丢失一些东西吗?交易失败?EntityManager不刷新?谢谢你,我认为这是一个时间问题——对于调试器来说,事务发生得太快了