たとえば、ドメイン クラスで既定値を再定義せずに、その列をデータベースの既定値に設定したいとします。
私はGoogleを通して多くを見つけることができません。Hibernate を直接操作している場合、その特定の列/プロパティをプライベートに設定でき、これにより目的が達成される可能性があるというヒントがあります。
もちろん、その列を未定義のままにしておくことができ、GORM はそれを無視します。しかし、Grails アプリが選択を行うときはいつでも、そこから値を取得する必要があります。
たとえば、ドメイン クラスで既定値を再定義せずに、その列をデータベースの既定値に設定したいとします。
私はGoogleを通して多くを見つけることができません。Hibernate を直接操作している場合、その特定の列/プロパティをプライベートに設定でき、これにより目的が達成される可能性があるというヒントがあります。
もちろん、その列を未定義のままにしておくことができ、GORM はそれを無視します。しかし、Grails アプリが選択を行うときはいつでも、そこから値を取得する必要があります。
ドキュメントのように挿入可能な GORM プロパティを使用するか、beforeInsert
イベントで値を読み取ることができます。
class Book {
String title
String isbn
static mapping = {
isbn nullable: false
}
def beforeInsert {
title = queryFromDatabase...
}
}
要件は既存のデータベースからデフォルト値を読み取ることなので、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
これは完全な答えではありませんが、これがお役に立てば幸いです。