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

Grails के साथ हाइबरनेट और पोस्टग्रेएसक्यूएल

संक्षिप्त उत्तर नहीं है, कोई आसान नहीं है ऐसा करने का तरीका। हालांकि, मुझे एक समाधान मिला है जो काम करता है। मूल रूप से आपको एक कस्टम बोली लागू करने की आवश्यकता है। यहां एक कार्यान्वयन है (कृपया टिप्पणियों के भीतर कार्यान्वयन के मूल स्रोत पर ध्यान दें)।

package com.my.custom;

import java.util.Properties;

import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.PostgreSQLDialect;
import org.hibernate.id.PersistentIdentifierGenerator;
import org.hibernate.id.SequenceGenerator;
import org.hibernate.type.Type;


/**
 * Creates a sequence per table instead of the default behavior of one sequence.
 *
 * From <a href='http://www.hibernate.org/296.html'>http://www.hibernate.org/296.html</a>
 * @author Burt
 */
public class TableNameSequencePostgresDialect extends PostgreSQLDialect {

    /**
     * Get the native identifier generator class.
     * @return TableNameSequenceGenerator.
     */
    @Override
    public Class<?> getNativeIdentifierGeneratorClass() {
            return TableNameSequenceGenerator.class;
    }

    /**
     * Creates a sequence per table instead of the default behavior of one sequence.
     */
    public static class TableNameSequenceGenerator
           extends SequenceGenerator {

            /**
             * {@inheritDoc}
             * If the parameters do not contain a {@link SequenceGenerator#SEQUENCE} name, we
             * assign one based on the table name.
             */
            @Override
            public void configure(
                            final Type type,
                            final Properties params,
                            final Dialect dialect) {
                    if (params.getProperty(SEQUENCE) == null
                                    || params.getProperty(SEQUENCE).length() == 0) {
                            String tableName = params.getProperty(PersistentIdentifierGenerator.TABLE);
                            if (tableName != null) {
                                    params.setProperty(SEQUENCE, "seq_" + tableName);
                            }
                    }
                    super.configure(type, params, dialect);
            }
    }

}

उपरोक्त कार्यान्वयन को TableNameSequencePostgresDialect.java के रूप में संग्रहित किया जाना चाहिए src/java/com/my/custom . के अंतर्गत आपके Grails प्रोजेक्ट के भीतर।

इसके बाद, अपना DataSource.groovy update अपडेट करें इस नई कस्टम बोली का उपयोग करने के लिए।

dialect = com.my.custom.TableNameSequencePostgresDialect

इसके बारे में काफी कुछ है। नहीं आसान लेकिन यह किया जा सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - चयन करते समय विदेशी कुंजी की जांच करें

  2. पोस्टग्रेस्क्ल:एनम और कैरेक्टर अलग-अलग, अपडेटिंग

  3. मैं django और psycopg2 के साथ सर्वर-साइड कर्सर का उपयोग कैसे कर सकता हूं?

  4. psql:घातक:भूमिका आवारा मौजूद नहीं है

  5. नाइटवॉच कस्टम कमांड कॉलबैक