मेरे पास पिछले कई दिनों से एक ही बग है। जैसा यह जवाब
ने कहा, hibernate.hbm2ddl.auto
. को अक्षम करना संभव है आपके persistence.xml
. में प्रॉपर्टी , लेकिन यदि आपका प्रोजेक्ट तेजी से विकसित हो रहा है तो यह एक अच्छा विचार नहीं है।
टीएल; डॉ: संपत्ति सेट करें hibernate.hbm2dll.extra_physical_table_types
MATERIALIZED VIEW
।
या -Dhibernate.hbm2dll.extra_physical_table_types="MATERIALIZED VIEW"
जोड़ें वीएम विकल्पों के लिए। लेकिन कॉन्फ़िगरेशन फ़ाइल के लिए ऐसे विकल्पों के लिए बेहतर है।
अभी, हम PostgreSQL 9.6 और हाइबरनेट 5.2.12.Final का उपयोग कर रहे हैं। कुछ हद तक, सभी भौतिक विचारों के सत्यापन निम्नलिखित अपवाद के साथ विफल हो रहे थे:
सत्यापन को सफलतापूर्वक पारित करने वाली सभी इकाइयां या तो साधारण टेबल या दृश्य थीं।
ऐसा लगता है कि यह सामान्य डेटाबेस के लिए एक डिफ़ॉल्ट व्यवहार है। स्रोतों में यहां
ऑन लाइन्स 79-81
वे केवल इन प्रकारों को जोड़ते हैं:
final List<String> tableTypesList = new ArrayList<>();
tableTypesList.add( "TABLE" );
tableTypesList.add( "VIEW" );
लाइन्स 85-87
हमें बताएं कि इन हार्डकोडेड मानों को कस्टम वाले के साथ विस्तारित करने की संभावना है:
if ( extraPhysicalTableTypes != null ) {
Collections.addAll( tableTypesList, extraPhysicalTableTypes );
}
ऑन लाइन 56
यह घोषित किया गया है private String[] extraPhysicalTableTypes;
,और ऑन लाइन 71-77
इस सरणी में कुछ और मान जोड़े गए हैं:
if ( !"".equals( extraPhysycalTableTypesConfig.trim() ) ) {
this.extraPhysicalTableTypes = StringHelper.splitTrimmingTokens(
",;",
extraPhysycalTableTypesConfig,
false
);
}
वे पंक्तियों से आते हैं 66-70
, कुंजी EXTRA_PHYSICAL_TABLE_TYPES
के अंतर्गत स्ट्रिंग के रूप में एन्कोड किया गया खाली डिफ़ॉल्ट मान के साथ:
final String extraPhysycalTableTypesConfig = configService.getSetting(
AvailableSettings.EXTRA_PHYSICAL_TABLE_TYPES,
StandardConverters.STRING,
""
);
और यहां
ऑन लाइन 1545
उस कुंजी की घोषणा है:
/**
* 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";
इसलिए, इस गुण को जोड़ने से tableTypesList
. में एक और प्रविष्टि जुड़ जाएगी जिसका उपयोग डेटाबेस में कई अन्य संस्थाओं को फ़िल्टर करने के लिए किया जाता है, जैसे कि अनुक्रम, सूचकांक, अस्थायी तालिका और अन्य, जिनका नाम आपके भौतिक दृश्य के समान हो सकता है।
इस प्रकार मेरा persistence.xml
ऐसा लगता है, यदि आप रुचि रखते हैं:
<?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>
पी.एस. मुझे पता है कि यह बहुत पुरानी पोस्ट है, लेकिन मैं कुछ दिनों तक इस समस्या से जूझता रहा। मैं इसका उत्तर खोजने में विफल रहा, इसलिए मैंने इसे इंटरनेट पर कहीं रखने का निर्णय लिया। और यह कहीं बन गया। :)पी>