Java 以不同方式管理的调试模式事务

Java 以不同方式管理的调试模式事务,java,entitymanager,Java,Entitymanager,我想从带有特定sql语句的列表中删除对象。 示例:包含消息列表的档案 我希望删除邮件后,列表会自动刷新。情况确实如此,但当我使用远程Java应用程序启动应用程序时,我必须使用实体管理器手动刷新档案。我想知道为什么在调试代码时会有这样的差异 我使用weblogic作为应用服务器 谢谢 BenefitDossier dossier = dossierRepo.getDossierByDossierId(dossierIdentifier, CREATED); // perform the remo

我想从带有特定sql语句的列表中删除对象。 示例:包含消息列表的档案

我希望删除邮件后,列表会自动刷新。情况确实如此,但当我使用远程Java应用程序启动应用程序时,我必须使用实体管理器手动刷新档案。我想知道为什么在调试代码时会有这样的差异

我使用weblogic作为应用服务器

谢谢

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不刷新?谢谢你,我认为这是一个时间问题——对于调试器来说,事务发生得太快了