PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Хибернация и 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 за да използвате този нов персонализиран диалект.

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. Postgres:командата vacuum не почиства мъртвите кортежи

  2. Какъв е правилният начин за работа с резултати от поточно предаване на slick 3.0.0 и Postgresql?

  3. C#, Entity Framework Core &PostgreSql:вмъкването на един ред отнема 20+ секунди

  4. PSQLException:ГРЕШКА:синтактична грешка в tsquery

  5. Oracle еквивалент на Postgres' DISTINCT ON?