Ik heb de afgelopen dagen dezelfde bug gehad. Als dit antwoord
gezegd, is het mogelijk om hibernate.hbm2ddl.auto
uit te schakelen eigenschap in uw persistence.xml
, maar het is geen goed idee als uw project zich snel ontwikkelt.
TL;DR: eigenschap instellen hibernate.hbm2dll.extra_physical_table_types
naar MATERIALIZED VIEW
.
Of voeg -Dhibernate.hbm2dll.extra_physical_table_types="MATERIALIZED VIEW"
toe naar VM-opties. Maar het is beter om dergelijke opties in het configuratiebestand te plaatsen.
Op dit moment gebruiken we PostgreSQL 9.6 en Hibernate 5.2.12.Final. Op de een of andere manier faalden alle validaties van gerealiseerde weergaven met de volgende uitzondering:
Alle entiteiten die de validatie met succes hebben doorstaan, waren ofwel eenvoudige tabellen of weergaven.
Het lijkt erop dat dit een standaardgedrag is voor generieke databases. In bronnen hier
op regels 79-81
ze voegen alleen deze typen toe:
final List<String> tableTypesList = new ArrayList<>();
tableTypesList.add( "TABLE" );
tableTypesList.add( "VIEW" );
Regels 85-87
vertel ons dat er een mogelijkheid is om deze hardcoded waarden uit te breiden met aangepaste:
if ( extraPhysicalTableTypes != null ) {
Collections.addAll( tableTypesList, extraPhysicalTableTypes );
}
Online 56
het wordt verklaard private String[] extraPhysicalTableTypes;
,en op regels 71-77
er zijn wat meer waarden toegevoegd aan deze array:
if ( !"".equals( extraPhysycalTableTypesConfig.trim() ) ) {
this.extraPhysicalTableTypes = StringHelper.splitTrimmingTokens(
",;",
extraPhysycalTableTypesConfig,
false
);
}
Ze komen uit de regels 66-70
, gecodeerd als String onder sleutel EXTRA_PHYSICAL_TABLE_TYPES
met lege standaardwaarde:
final String extraPhysycalTableTypesConfig = configService.getSetting(
AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES,
StandardConverters.STRING,
""
);
En hier
online 1545
is de verklaring van die sleutel:
/**
* 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";
Dus, het toevoegen van deze eigenschap zal een nieuw item toevoegen aan tableTypesList
die wordt gebruikt voor het filteren van vele andere entiteiten in de database, zoals reeksen, indices, tijdelijke tabellen en andere, die een naam kunnen hebben die lijkt op die van u.
Dit is hoe mijn persistence.xml
ziet eruit als, als je geïnteresseerd bent:
<?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>
PS Ik weet dat het een heel oud bericht is, maar ik heb een paar dagen met dit probleem geworsteld. Ik kon geen antwoord vinden, dus besloot ik het ergens op internet te zetten. En dit werd ergens hier. :)