0

当我直接在我的数据库(SQL Server)中进行更改时,例如向表中添加新行,更改不会反映在我的 Web 应用程序(尝试刷新浏览器)中,直到我再次运行我的应用程序(在 intellij 中使用 tomcat 插件)。

如果我从我的应用程序中添加一行,我可以在我的数据库管理员上立即看到它,但反之则行不通。

这是我的 persitence.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="Frutemu" transaction-type="RESOURCE_LOCAL">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <jta-data-source>openjpa</jta-data-source>
        <class>model2.AnalisisProcesosEntity</class>
        <class>model2.AnalisisProcesosDetalleEntity</class>
        <class>model2.AnalisisProcesosPesosEntity</class>
        <class>model2.AnalisisRecepcionesEntity</class>
        <class>model2.AnalisisRecepcionesDetallesEntity</class>
        <class>model2.CalibresEntity</class>
        <class>model2.CalidadDefectosEntity</class>
        <class>model2.CalidadesEntity</class>
        <class>model2.CamarasEntity</class>
        <class>model2.DespachosEntity</class>
        <class>model2.DespachosDetalleEntity</class>
        <class>model2.EspeciesEntity</class>
        <class>model2.ExportadorasEntity</class>
        <class>model2.InspeccionesEntity</class>
        <class>model2.InspeccionesDespachosEntity</class>
        <class>model2.InspeccionesDespachosDetalleEntity</class>
        <class>model2.InspeccionesDetalleEntity</class>
        <class>model2.InspeccionesPalletsEntity</class>
        <class>model2.InspeccionesPalletsDetalleEntity</class>
        <class>model2.InspeccionesResultadoEntity</class>
        <class>model2.PalletsEntity</class>
        <class>model2.PalletsDetalleEntity</class>
        <class>model2.PlantasEntity</class>
        <class>model2.PlantasEmbalajeEntity</class>
        <class>model2.ProcesosEntity</class>
        <class>model2.ProcesosDetalleEntity</class>
        <class>model2.ProductoresEntity</class>
        <class>model2.ProductoresExportadorasEntity</class>
        <class>model2.RecepcionesEntity</class>
        <class>model2.RecepcionesDetalleEntity</class>
        <class>model2.SysdiagramsEntity</class>
        <class>model2.TemporadasEntity</class>
        <class>model2.TiposEmbalajeEntity</class>
        <class>model2.TiposProductoEntity</class>
        <class>model2.UsuariosEntity</class>
        <class>model2.VariedadesEntity</class>
        <class>model2.VistaProcesosEntity</class>
        <class>model2.VistaRecepcionesEntity</class>

        <properties>

            <property name="openjpa.ConnectionDriverName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
            <property name="openjpa.ConnectionURL" value="jdbc:sqlserver://localhost:55334;databaseName=Frutemu;integratedSecurity=true"/>
            <property name="openjpa.ConnectionUserName" value=""/>
            <property name="openjpa.ConnectionPassword" value=""/>

            <property name="openjpa.jdbc.SynchronizeMappings"
                      value="buildSchema(SchemaAction='add,OpenJPATables=true',ForeignKeys=true)"/>
            <!--property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add,OpenJPATables=true',ForeignKeys=true)"/-->
            <property name="openjpa.DynamicEnhancementAgent" value="true"/>
            <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=ERROR"/>
            <property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true, MaxActive=10, MaxIdle=5, MinIdle=2, MaxWait=60000"/>
            <property name="openjpa.jdbc.DBDictionary" value="org.apache.openjpa.jdbc.sql.MySQLDictionary"/>
            <property name="openjpa.DataCache" value="true"/>
            <property name="openjpa.QueryCache" value="true"/>


        </properties>
    </persistence-unit>
</persistence>

这是我从中获取数据以显示在视图中的 bean:

@ManagedBean(name = "recepciones")
@ViewScoped
public class RecepcionesBean {

        private List<VistaRecepcionesEntity> recepciones;

        @PostConstruct
        public void init(){
            recepciones=new ArrayList<VistaRecepcionesEntity>();
            recepciones= RecepcionesDAO.getALL();
        }

        public List<VistaRecepcionesEntity> getRecepciones() {
            return recepciones;
        }

        public void setRecepciones(List<VistaRecepcionesEntity> recepciones) {
            this.recepciones = recepciones;
        }


        }
    }
4

1 回答 1

1

我不熟悉openJPA。但是该选项openjpa.DataCache似乎表明您为数据激活了缓存。在这种情况下,有几种策略。

  1. 如果您真的不需要直接“手动”更新数据库,那么不要。或者停用缓存。这两个中的一个可能是最安全的,或者至少是最简单的。
  2. 否则,您可能需要自定义缓存策略。您可以在 X 分钟后使缓存失效(并接受您的应用程序中可能有长达 X 分钟的陈旧数据的事实)。
  3. 或者,您也可以编写一个允许您手动清除缓存的页面。然后,您可以在每次手动更新数据库时调用它。
于 2013-04-29T11:41:51.980 回答