我定义了三个班级。
1)
class Office extends Organization {
String name
DistanceChart distanceChart
static constraints = {
name(nullable : false)
distanceChart(nullable:true)
}
static mapping = {
officeRoles(cascade:'all')
}
public String toString() {
name
}
}
2)
class DistanceChart {
VehicleClassification classification1
VehicleClassification classification2
VehicleClassification classification3
VehicleClassification classification4
VehicleClassification classification5
List<PointDistanceMapping> pointDistanceMapping =new ArrayList<PointDistanceMapping>()
static contraints ={
classification1(nullable:true);
classification2(nullable:true)
classification3(nullable:true)
classification4(nullable:true)
classification5(nullable:true)
pointDistanceMapping()
}
static belongsTo = [office:Office]
static hasMany = [pointDistanceMapping : PointDistanceMapping]
static mapping = {
pointDistanceMapping cascade: "all"
}
public String toString() {
id
}
}
第3)
class PointDistanceMapping {
Point point
float distance1
float distance2
float distance3
float distance4
float distance5
static constraints = {
point()
distance1(nullable:true)
distance2(nullable:true)
distance3(nullable:true)
distance4(nullable:true)
distance5(nullable:true)
}
static belongsTo = [distanceChart : DistanceChart]
public String toString() {
id
}
}
我有两个疑问:
1)我是否需要在两个类中指定关系,即 hasOne或hasMany和belongsTo (双向)。所以定义的好习惯是什么grails中的关系。
2)我的第二个问题是 grails自动保存子对象。在这个上下文中。我将pointDistanceMapping对象作为数组,grails是否将pointDistanceMapping数组值保存到数据库中,并将在point_distance_mapping中设置设置外键distance_chart_id
当我保存DistanceChart对象时,grails是否在office表中设置distance_chart_id
如果grails没有保存关联对象意味着当我保存DistanceChart时,会保存pointdistancemapping。然后如何执行此操作。
当distanceChart被保存时,如何在office表中保存distance_chart_id。
答案 0 :(得分:1)
您可以更方便地进行迭代。通常,如果您的代码不需要关系属性(YAGNI) - 请不要创建一个。如果集合非常大,请不要创建集合属性,最好使用动态findAll*()
方法来处理关系。
Grails级联由belongsTo
和cascade
mapping DSL控制:
“cascade
- [...]可以是all
,merge
,save-update
,{{1}中的一个或多个(以逗号分隔) }},delete
,lock
,refresh
,evict
或replicate
(仅限一对多关联)。
默认情况下,如果一个实体all-delete-orphan
另一个实体{
all
配置级联策略
醇>