PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Hibernacja i postgreSQL z Grails

Krótka odpowiedź brzmi:nie, nie ma łatwego sposób to zrobić. Jednak znalazłem rozwiązanie, które działa. Zasadniczo musisz zaimplementować niestandardowy dialekt. Oto implementacja (proszę zwrócić uwagę na oryginalne źródło implementacji w komentarzach).

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

}

Powyższa implementacja powinna być przechowywana jako TableNameSequencePostgresDialect.java pod src/java/com/my/custom w Twoim projekcie Grails.

Następnie zaktualizuj swój DataSource.groovy aby używać tego nowego niestandardowego dialektu.

dialect = com.my.custom.TableNameSequencePostgresDialect

To prawie wszystko. Nie łatwe ale można to zrobić.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Symfony2 Doctrine - klauzula ILIKE dla PostgreSQL?

  2. Jak mogę zapobiec ucieczce danych przez CakePHP podczas zapisu?

  3. 3 sposoby sprawdzenia typu danych kolumny w PostgreSQL

  4. Generowanie identyfikatora UUID w instrukcji Postgres for Insert?

  5. Przestaw na wiele kolumn za pomocą funkcji Tablefunc