gpt4 book ai didi

hibernate - 用于单向1:n关系的Grails GORM数据库映射

转载 作者:行者123 更新时间:2023-12-02 14:54:02 25 4
gpt4 key购买 nike

我目前正在尝试基于旧版MySQL数据库创建新的Grails应用程序。该应用程序应仅读取信息。具体的DB模式针对特定的域类使用每个类层次结构的表以及用于向这些类添加新的所需信息的属性类。

目前,我无法检索transation的属性信息。也不异常(exception),但是我也无法访问properties字段。我可能会遇到的一个问题是,单词properties是Grails的域字段关键字。但是由于特定的旧表命名,我需要使用它。

传统表名为transactiontransaction_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.
}

域名类 交易属性
  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}"
}
}

最佳答案

您的代码是一团糟。

您需要在TransactionProperty域类中添加static belongsTo = [transaction: Transaction]。这将告诉grails在该表中使用外键,而不需要连接表。

您也不需要在任何一个表中指定Long id。默认情况下,这在Grails中完成。

在Transaction域类中也删除这些列映射:

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):

交易:
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

}

交易属性:
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()
}
}

关于hibernate - 用于单向1:n关系的Grails GORM数据库映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13917366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com