0

テーブルに新しい行を追加するなど、データベース (SQL Server) に直接変更を加えると、変更は Web アプリに反映されません (ブラウザーを更新しようとしました)。 )。

アプリから行を追加すると、データベース管理者にすぐに表示されますが、その逆は機能しません。

これは私の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 つのうちの 1 つが、おそらく最も安全であるか、少なくとも最も単純です。
  2. それ以外の場合は、おそらくキャッシュ戦略をカスタマイズする必要があります。X 分後にキャッシュを無効にすることができます (そして、アプリに最大 X 分間古いデータが存在する可能性があるという事実を受け入れます)。
  3. または、手動でキャッシュをクリアできるページをコーディングすることもできます。その後、データベースを手動で更新するたびに呼び出すことができます。
于 2013-04-29T11:41:51.980 に答える