sql >> Database >  >> RDS >> PostgreSQL

Slaapstand en postgreSQL met Grails

Het korte antwoord is nee, er is geen gemakkelijke manier om dit te doen. Ik heb echter een oplossing gevonden die wel werkt. In principe moet je een aangepast dialect implementeren. Hier is een implementatie (let op de originele bron van de implementatie in de opmerkingen).

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);
            }
    }

}

De bovenstaande implementatie moet worden opgeslagen als TableNameSequencePostgresDialect.java onder src/java/com/my/custom binnen uw Grails-project.

Update vervolgens uw DataSource.groovy om dit nieuwe aangepaste dialect te gebruiken.

dialect = com.my.custom.TableNameSequencePostgresDialect

Dat is het zo'n beetje. Niet gemakkelijk maar het kan.




  1. Hoe combineer je meerdere date-between zoekopdrachten met CrudRepository of Spring Data JPA?

  2. Bereken lopend totaal / lopend saldo

  3. Een enkel eindpunt maken voor uw PostgreSQL-replicatie-installatie met behulp van HAProxy

  4. Hoe het DB AWS-geheim door te geven aan tomcat context.xml?