PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Meja yang hilang pada tampilan yang terwujud

Saya memiliki bug yang sama selama beberapa hari terakhir. Sebagai jawaban ini mengatakan, adalah mungkin untuk menonaktifkan hibernate.hbm2ddl.auto properti di persistence.xml . Anda , tetapi bukan ide yang baik jika proyek Anda berkembang pesat.

TL;DR: setel properti hibernate.hbm2dll.extra_physical_table_types ke MATERIALIZED VIEW .

Atau tambahkan -Dhibernate.hbm2dll.extra_physical_table_types="MATERIALIZED VIEW" ke opsi VM. Tetapi lebih baik untuk opsi seperti itu ke file konfigurasi.

Saat ini, kami menggunakan PostgreSQL 9.6 dan Hibernate 5.2.12.Final. Entah mengapa, semua validasi tampilan yang terwujud gagal dengan pengecualian berikut:

Semua entitas yang berhasil melewati validasi adalah tabel atau tampilan sederhana.

Sepertinya ini adalah perilaku default untuk database generik. Dalam sumber di sini pada baris 79-81 mereka hanya menambahkan jenis berikut:

final List<String> tableTypesList = new ArrayList<>();
tableTypesList.add( "TABLE" );
tableTypesList.add( "VIEW" );

Baris 85-87 beri tahu kami bahwa ada kemungkinan untuk memperluas nilai hardcode ini dengan nilai khusus:

if ( extraPhysicalTableTypes != null ) {
    Collections.addAll( tableTypesList, extraPhysicalTableTypes );
}

Online 56 dideklarasikan private String[] extraPhysicalTableTypes; , dan pada baris 71-77 ada beberapa nilai lagi yang ditambahkan ke dalam larik ini:

if ( !"".equals( extraPhysycalTableTypesConfig.trim() ) ) {
    this.extraPhysicalTableTypes = StringHelper.splitTrimmingTokens(
        ",;",
        extraPhysycalTableTypesConfig,
        false
    );
}

Mereka berasal dari baris 66-70 , dikodekan sebagai String di bawah kunci EXTRA_PHYSICAL_TABLE_TYPES dengan nilai default kosong:

final String extraPhysycalTableTypesConfig = configService.getSetting(
    AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES,
    StandardConverters.STRING,
    ""
);

Dan di sini pada baris 1545 adalah deklarasi kunci itu:

/**
 * Identifies a comma-separate list of values to specify extra table types,
 * other than the default "TABLE" value, to recognize as defining a physical table
 * by schema update, creation and validation.
 *
 * @since 5.0
 */
String EXTRA_PHYSICAL_TABLE_TYPES = "hibernate.hbm2dll.extra_physical_table_types";

Jadi, menambahkan properti ini akan menambahkan entri lain ke tableTypesList yang digunakan untuk memfilter banyak entitas lain dalam basis data, seperti urutan, indeks, tabel sementara, dan lainnya, yang mungkin memiliki nama yang mirip dengan tampilan terwujud Anda.

Beginilah cara persistence.xml saya sepertinya, jika Anda tertarik:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
    <persistence-unit name="project-pu">
        <jta-data-source>java:jboss/datasources/project-pu</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect"/>
            <property name="hibernate.hbm2ddl.auto" value="validate"/>
            <property name="hibernate.hbm2dll.extra_physical_table_types" value="MATERIALIZED VIEW"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="false"/>
            <property name="hibernate.use_sql_comments" value="false"/>
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/mgt"/>
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

P.S. Saya tahu ini adalah posting yang sangat lama, tetapi saya berjuang dengan masalah ini selama beberapa hari. Saya gagal menemukan jawaban, jadi saya memutuskan untuk meletakkannya di suatu tempat di Internet. Dan ini di suatu tempat menjadi di sini. :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi membutuhkan waktu lama untuk dijalankan untuk sejumlah besar catatan

  2. Django OperationalError:tidak dapat memotong proses baru untuk koneksi

  3. Bagaimana cara menonaktifkan sementara pemicu di PostgreSQL?

  4. Licin dan bonecp:org.postgresql.util.PSQLException:FATAL:maaf, terlalu banyak klien yang sudah error

  5. Menggunakan psql untuk terhubung ke PostgreSQL dalam mode SSL