使用 Grails 开发 Google App Engine 应用
2010-06-24 00:00:00 来源:WEB开发网在有主关系下,可以只调用主实体的更新操作就可同时将子实体进行更新。比如新增 Task,可以调用当前用户的 save 操作。参见清单 11:
清单 11. 有主一对多新增操作
def taskInstance = new Task(params)
Task.withTransaction {
def currentuser=User.get(params.currentuser)
currentuser.tasks<<taskInstance
currentuser.save(flush:true)
……
}
从上述代码中可以看出,currentuser.save操作会同时对 taskInstance 进行新增,而 taskInstance 的主键类似于 User(1)/Task(2)。
对于无主的一对多的关系,可以参考无主的一对一关系。这里不再赘述。
Task 和 Category 的无主的多对多关系
GAE 不支持有主的多对多的关系,那么对于无主的多对多的关系,可以通过保留关系双方的键集合来实现。比如 Task 和 Category 的关系可以是无主的多对多的关系:
清单 12. Task 的 Domain Class
package mulan
import com.google.appengine.api.datastore.Key;
import javax.persistence.*;
@Entity
class Task implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Key id
List<Key> cats =[]
……
}
清单 13. Category 的 Domain Class
package mulan
import com.google.appengine.api.datastore.Key;
import javax.persistence.*;
@Entity
class Category implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Key id
List<Key> tasks =[]
……
}
更多精彩
赞助商链接