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. :)