現在、レガシー MySQL データベースに基づいて新しい Grails アプリケーションを作成しようとしています。アプリケーションは情報を読み取るだけです。具体的な DB スキーマは、特定のドメイン クラスに対して、クラス階層構造ごとのテーブルと、これらのクラスに必要な新しい情報を追加するためのプロパティ クラスを使用します。
現在、 のプロパティ情報を取得できませんtransation
。例外はありませんが、私もフィールドにアクセスできませんproperties
。私が直面する可能性のある問題の 1 つは、単語properties
が Grails のドメイン フィールドのキーワードであるということです。しかし、特定の従来のテーブルの命名のために、それを使用する必要があります。
レガシー テーブルの名前はtransaction
およびtransaction_properties
です。複数transcation
持つことができますtransaction_properties
。transaction_id
関連付けは、テーブル内のキーを介して行われtransaction_properties
ます。
テーブルトランザクション
id bigint(20)
transaction_id varchar(255) (bad naming here, transaction_id is used to store additional meta information)
テーブルtransaction_properties
transaction_id bigint(20) -> referencing to transation.id
property_value varchar(255)
property_key varchar(32)
etc.
ドメイン クラストランザクション
class Transaction {
static hasMany = [properties : TransactionProperty]
static constraints = {
// transactionProperty unique: true
}
static mapping = {
table "transaction"
version false
columns {
id column : "id"
beginDate column : "start"
endDate column : "end"
type column : "DTYPE"
amount column : "total_amount"
metaId column : "transaction_id"
purchase column : "purchase_id"
service column : "service_id"
origin column : "origin_id"
properties column : "id"
}
}
Long id
Date beginDate
Date endDate
String type
String amount
String metaId
Purchase purchase
Origin origin
Service service
etc.
}
ドメイン クラスTransactionProperty
class TransactionProperty {
static mapping = {
table "transaction_properties"
version false
columns {
id name : "transaction_id"
key column : "property_key"
value column : "property_value"
}
}
String value
String key
Long id
def asString(){
return "${key} = ${value}"
}
}