我在项目中将EclipseLink JPA用作ORM,将Web逻辑10.3用作应用程序服务器。一切正常,直到出现数据刷新错误为止。这是我的实体表行之一更新为新值,但我的实体管理器或JPA没有选择该值的情况。为此,我们只能依靠它重新启动服务器。然后它拿起了价值。
这是我的persistence.xml文件,这是我在课堂上使用实体管理器的方式。
<persistence-unit name="BasePersistenceUnit" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/CTH_DS</jta-data-source> <class>org.test.partyrequest.model.dataobject.RqstTrc</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="eclipselink.target-server" value="WebLogic_10" /> <!-- Logging level is set to INFO, Need to change in Production --> <property name="eclipselink.logging.level" value="FINE" /> <property name="eclipselink.persistence-context.flush-mode" value="COMMIT" /> <property name="eclipselink.persistence-context.close-on-commit" value="true" /> <property name="eclipselink.cache.shared.default" value="false" /> </properties> </persistence-unit>
春季JPA XML文件
<context:load-time-weaver aspectj-weaving="on" /> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitName" value="BasePersistenceUnit" /> </bean> <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter" /> <bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager" /> <!-- ========================= BUSINESS OBJECT DEFINITIONS ========================= --> <!-- Instruct Spring to perform declarative transaction management automatically on annotated classes. --> <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/> <!-- Post-processor to perform exception translation on @Repository classes (from native exceptions such as JPA PersistenceExceptions to Spring's DataAccessException hierarchy). --> <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
我的实体
@Entity @Table(name =“ PRTY_RQST”)公共类PrtyRqst实现了Serializable { private static final long serialVersionUID = -4679712398918736694L; @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRTY_RQST_PRTYRQSTID_GENERATOR") @SequenceGenerator(name = "PRTY_RQST_PRTYRQSTID_GENERATOR", allocationSize = 1, sequenceName = "PRTY_RQST_SEQ") @Column(name = "PRTY_RQST_ID") private Long prtyRqstId; @Column(name = "CHLD_RQST_IND") private String chldRqstInd; @Column(name = "PARNT_PRTY_RQST_ID") private BigDecimal parntPrtyRqstId; @Column(name = "PROCES_REFR") private String procesRefr; @Temporal(TemporalType.TIMESTAMP) @Column(name = "RQST_DT_TM") private Date rqstDtTm; @Column(name = "UPDT_BY") private String updtBy; // bi-directional many-to-one association to PrtyKey @OneToMany(mappedBy = "prtyRqst", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<PrtyKey> prtyKeys; // bi-directional many-to-one association to PrtyRqstHist @OneToMany(mappedBy = "prtyRqst", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OrderBy("rqstDtTm DESC") private List<PrtyRqstHist> prtyRqstHists; @OneToOne(mappedBy = "prtyRqst", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private RqstPayload rqstPayload; // bi-directional many-to-one association to RqstTrc @OneToMany(mappedBy = "prtyRqst", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<RqstTrc> rqstTrcs; // bi-directional many-to-one association to AddtnRqstInfo @OneToMany(mappedBy = "prtyRqst", fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<AddtnRqstInfo> addtnRqstInfos; // bi-directional many-to-one association to BusnApplc @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH) @JoinColumn(name = "BUSN_APPLC_ID") private BusnApplc busnApplc; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH) @JoinColumn(name = "INTN_PROCES_TYP_ID") private IntnProcesTyp intnProcesTyp; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH) @JoinColumn(name = "INTN_STATS_ID") private IntnStat intnStat; @Column(name = "ORCHESTRATION_ID") private String orchestrationId; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH) @JoinColumn(name = "ALLW_CHNL_ID") private AllwChnl allwChnl; // bi-directional many-to-one association to RqstTyp @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.REFRESH) @JoinColumn(name = "RQST_TYP_ID") private RqstTyp rqstTyp; @Column(name = "TRACK_RQST_IND") private String trackRqstInd; @Temporal(TemporalType.TIMESTAMP) @Column(name = "SUBMIT_DT_TM") private Date submitDtTm; @Temporal(TemporalType.DATE) @Column(name = "EFFECTIVE_DT") private Date effectiveDt; @Temporal(TemporalType.TIMESTAMP) @Column(name = "RQST_CREATE_DT_TM") private Date rqstCreateDtTm;
在我的DAO IMPL类中,我有this.persist(prtyRqstDO);
@Transactional(readOnly = true, propagation=Propagation.REQUIRED) private PartyRequestBO createRequest(PartyRequestBO partyRequestBO, boolean isParent) throws RuntimeException { if (log.isDebugEnabled()) { log.debug("Enter: PartyRequestsDAOImpl:createRequest()"); } partyRequestBO.setOrchestrationID(generateOrchestrationId()); PrtyRqst prtyRqstDO = PartyRequestEntityMapper.partyRequestMapper(partyRequestBO, isParent, true); try { this.persist(prtyRqstDO); partyRequestBO.setRequestIdentifier(prtyRqstDO.getPrtyRqstId()); } catch (Exception e) { if(log.isDebugEnabled()) { log.debug("PartyRequestsDAOImpl:createRequest : " + PartyRequestConstants.UNABLE_TO_INSERT, e); } throw new PartyRequestDataException(PartyRequestConstants.UNABLE_TO_INSERT, e); } if (log.isDebugEnabled()) { log.debug("Exit: PartyRequestsDAOImpl:createRequest()"); } return partyRequestBO; } @Transactional(readOnly = true, propagation=Propagation.REQUIRED) public void persist(T entity) { if (log.isDebugEnabled()) { log.debug("Enter: BaseDAO:persist() : " + entity); } this.getEntityManager().persist(entity); if (log.isDebugEnabled()) { log.debug("Exit: BaseDAO:persist()"); } } public EntityManager getEntityManager() { if (log.isDebugEnabled()) { log.debug("Enter: BaseDAO:getEntityManager() : " + this.entityManager); } return this.entityManager; }
这里的问题是,如果我通过后端更新表之一中的行,则我的应用程序容器不会选择更改。
谁能告诉我?先感谢您。
编辑:
谢谢你们俩 我已经根据您的注释修改了以下代码行。
this.entityManager.clear(); this.entityManager.close(); //this.getEntityManager().refresh(entityManager);
在这里,我可以通过后端完成更新值,而无需重新启动服务器。但是问题在于它保留了所有更改的值。
例如,我已经将值更改为FulOrderWSA,它正在工作。更改为FulorderWSB,它又可以正常工作。现在我已经为FulOrderWSZ尝试了它不起作用(DB值为FulorderWSB)。
最后,我在这里尝试使用FulorderWSA作为数据库的旧值,它不起作用,但对我有用。我注意到它保留了所有数据库更改的值。
如何得到这个。我已经为entityManager使用了clear和close。谁可以帮我这个事。
谢谢。