PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

भौतिक दृश्य पर अनुपलब्ध तालिका

मेरे पास पिछले कई दिनों से एक ही बग है। जैसा यह जवाब ने कहा, 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>

पी.एस. मुझे पता है कि यह बहुत पुरानी पोस्ट है, लेकिन मैं कुछ दिनों तक इस समस्या से जूझता रहा। मैं इसका उत्तर खोजने में विफल रहा, इसलिए मैंने इसे इंटरनेट पर कहीं रखने का निर्णय लिया। और यह कहीं बन गया। :)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पदानुक्रमित डेटा में XPath क्वेरी, पूर्वजों-वंशज संबंधों को संरक्षित करना

  2. SQL सर्वर 2012:PostgreSQL से लिंक किया गया सर्वर जोड़ें

  3. पीएल/पीजीएसक्यूएल फ़ंक्शन से अज्ञात कॉलम के साथ गतिशील तालिका लौटाएं

  4. CentOS 7 पर पोस्टग्रेस्क्ल सेवा शुरू करने में असमर्थ

  5. पांडा to_sql में 'अनपेक्षित कीवर्ड तर्क' लाने 'त्रुटि का स्रोत?