PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Hibernasi &postgreSQL dengan Grails

Jawaban singkatnya adalah tidak, tidak ada yang mudah cara untuk melakukan ini. Namun, saya telah menemukan solusi yang berhasil. Pada dasarnya Anda perlu menerapkan dialek khusus. Berikut adalah implementasinya (harap perhatikan sumber asli implementasi dalam komentar).

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

}

Implementasi di atas harus disimpan sebagai TableNameSequencePostgresDialect.java di bawah src/java/com/my/custom dalam proyek Grails Anda.

Selanjutnya, perbarui DataSource.groovy Anda untuk menggunakan dialek khusus baru ini.

dialect = com.my.custom.TableNameSequencePostgresDialect

Itu cukup banyak tentang hal itu. Tidak mudah tapi itu bisa dilakukan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Iterasi melalui catatan PostgreSQL. Bagaimana cara mereferensikan data dari baris berikutnya?

  2. Bagaimana cara membuat kueri case-insensitive di Postgresql?

  3. Bagaimana cara melepaskan kemungkinan kunci baris Postgres?

  4. Mengapa PostgreSQL tidak menyukai nama tabel UPPERCASE?

  5. Ekspor hanya tampilan di Postgres