sql >> データベース >  >> RDS >> PostgreSQL

Grailsを使用したHibernateとpostgreSQL

    簡単な答えはノーです。簡単はありません これを行う方法。しかし、私はうまくいく解決策を見つけました。基本的に、カスタム方言を実装する必要があります。これが実装です(コメント内の実装の元のソースに注意してください)。

    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. mysql WHERE句が空の場合、すべての行を返します

    2. ErlangemysqliPhone絵文字エンコーディングの問題

    3. PostgreSQLデータベースからいくつかのテーブルを見つけて削除する方法

    4. Oracle 12cでは、外部結合を特徴とするクエリの動作が異なります。