Grails中定义了一对主从域类,主类用hasmany定义了一个子类。子类中,也用belongsTo定义了主类。在创建主类的时候,没有增加子类。而是单独创建的子类。不过,对应关系是保持的。
主类代码:
class EngineeringElement{
@JSONField(ordinal=0)
String name
@JSONField(ordinal=1)
String appendName
@JSONField(ordinal=2)
BasicStructure basicStructure
@JSONField(ordinal=5)
SortedSet dataItems
static hasMany = [dataItems: DataItem]
static mapping = {}
static constraints = {
name(nullable: false)
appendName(nullable: true)
basicStructure(nullable: false)
}
String toString() {
return "${name}"
}
}
子类代码:
class DataItem implements Comparable<DataItem> {
@JSONField(ordinal = 0)
String keyString
@JSONField(ordinal = 1)
String appendString
@JSONField(ordinal = 2)
String valueString
@JSONField(ordinal = 3)
DataPropertyType dataPropertyType = DataPropertyType.none
@JSONField(ordinal = 4)
int orderCode = 0
@JSONField(ordinal = 5, name = "engineeringElement")
static belongsTo = [engineeringElement: EngineeringElement]
DataItem() {
keyString = "demo标题"
appendString = "demo单位"
valueString = "demo数值"
dataPropertyType = DataPropertyType.none
}
static mapping = {
}
static constraints = {
keyString(nullable: false)
appendString(nullable: true)
valueString(nullable: true)
dataPropertyType()
orderCode()
}
String toString() {
if (valueString) {
return "${keyString}=${valueString}(${appendString})"
} else {
return "${keyString}"
}
}
@Override
int compareTo(DataItem o) {
return orderCode.compareTo(o.orderCode)
}
}
诡异的结果是:
系统中访问engineeringElement的时候,dataItems只能列出第一个子类的对象,数组的长度一直是1. 但是,数据库中对应关系是对的,用sql语句访问也没有问题。---是不是很诡异?