我目前正在尝试基于遗留的MySQL数据库创建一个新的Grails应用程序。应用程序只应读取信息。具体的DB模式为特定的域类使用了每个类层次结构的表,以及一个属性类来向这些类添加新的所需信息。
目前,我无法检索transation的属性信息。没有例外,但我也不能访问字段properties。我可能面临的一个问题是,对于域字段,properties是Grails的关键字。但是由于特定的旧表命名,我需要使用它。
遗留表名为transaction和transaction_properties。一个transcation可以有多个transaction_properties。关联是通过transaction_properties表中的键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}"
}
}发布于 2012-12-17 20:13:13
你的代码一团糟。
您需要在static belongsTo = [transaction: Transaction]域类中添加一个TransactionProperty。这将告诉grails使用该表中的外键,而不是想要一个联接表。
您也不需要在两个表中指定Long id。这在Grails中是默认的。
在事务域类中也删除这些列映射:
id column : "id"
properties column : "id"在TransactionProperty中,它在技术上没有主键(除非您对我们隐藏它),所以您必须使用property_key和property_value的复合键。
id name : "transaction_id"应:
id composite: ['key', 'value']请阅读此处的附加要求:http://grails.org/doc/latest/guide/GORM.html#5.5.2.5%20Composite%20Primary%20Keys
我最好的办法是修你的课:
交易:
class Transaction {
static hasMany = [properties : TransactionProperty]
static constraints = {
}
static mapping = {
table "transaction"
version false
columns {
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"
}
}
Date beginDate
Date endDate
String type
String amount
String metaId
Purchase purchase
Origin origin
Service service
}TransactionProperty:
import org.apache.commons.lang.builder.HashCodeBuilder
class TransactionProperty implements Serializable {
static belongsTo = [transaction: Transaction]
static mapping = {
table "transaction_properties"
version false
columns {
key column : "property_key"
value column : "property_value"
}
}
String value
String key
def toString(){
return "${key} = ${value}"
}
boolean equals(other) {
if (!(other instanceof TransactionProperty)) {
return false
}
other.key == key && other.value == value
}
int hashCode() {
def builder = new HashCodeBuilder()
builder.append key
builder.append value
builder.toHashCode()
}
}https://stackoverflow.com/questions/13917366
复制相似问题