5

たとえば、ドメイン クラスで既定値を再定義せずに、その列をデータベースの既定値に設定したいとします。

私はGoogleを通して多くを見つけることができません。Hibernate を直接操作している場合、その特定の列/プロパティをプライベートに設定でき、これにより目的が達成される可能性があるというヒントがあります。

もちろん、その列を未定義のままにしておくことができ、GORM はそれを無視します。しかし、Grails アプリが選択を行うときはいつでも、そこから値を取得する必要があります。

4

2 に答える 2

3

ドキュメントのように挿入可能な GORM プロパティを使用するか、beforeInsertイベントで値を読み取ることができます。

class Book {
    String title
    String isbn

    static mapping = {
        isbn nullable: false
    }

    def beforeInsert {
        title = queryFromDatabase...
    }
}
于 2012-09-17T21:49:24.737 に答える
1

要件は既存のデータベースからデフォルト値を読み取ることなので、beforeInsert/Hibernateインターセプタールートを使用する必要があると思います。

JDBCのDatabaseMetaData.getColumnsを使用して、列のデータベースのデフォルト値を読み取ることができます。

データベースのテーブルと列の名前を見つけるには、次のようなものを使用できます(このコードはテストされていません)

import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder
import org.codehaus.groovy.grails.orm.hibernate.cfg.Mapping
import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler

def gdc=grailsApplication.getArtefact(DomainClassArtefactHandler.TYPE, someInstance.class.name)
Mapping mapping=GrailsDomainBinder.getMapping(gdc)
def tableName=mapping.tableName
def columnName=mapping.getPropertyConfig('someColumn').column

これは完全な答えではありませんが、これがお役に立てば幸いです。

于 2012-09-18T03:15:43.877 に答える