前面分享了一些学习grails的心得,可是grails的知识还远不止这些,这次整理了一点有关grails一对多双向关联关系的知识。我认为这样的关联用的地方太多了,这次准备的样例是城市和区域的相关样例。

1.领域模型

class CityInfo {

    static hasMany = [area:AreaInfo]
static fetchMode = [area:'lazy']
Integer id;
String name;
String code;
static mapping = {
table 'm_city'
}
}

hasMany代表CityInfo是一的一方,fetchMode配置的是抓取模式,这里使用的是懒载入(默认)。要注意的是由于我的数据库中对于的表为m_city;假设不配置表示对于的表为CityInfo

class AreaInfo {
static belongsTo=[city:CityInfo]
Integer id;
String name;
String areaCode;
static mapping = {
table 'm_area'
areaCode column:'areaCode'
city column: 'cityId'
}
}

belongsTo配置的是多的一方,也就是是说AreaInfo中存在一个外键名称是city.综合上面的能够看出CityInfo是主表,而AreaInfo是从表。这里有点奇怪的是areaCode映射出来的列名为area_code为了方便我顺便把要映射的列名改掉了

2.创建控制器和视图

这个步骤就不说了,直接使用intellij IDE就能够自己主动为我们生成控制器和视图了。先来看看生成的控制器能不能用

这说明生成的控制器没有问题,以下加入一个方法用来保存城市和区域信息

//保存城市和区域信息
@Transactional
def saveCityAndArea(){
def a=new AreaInfo()
a.setName("西山区")
a.setAreaCode("XS") //Set<AreaInfo> s=new HashSet<AreaInfo>()
// s.add(a) def c=new CityInfo()
c.setName("昆明市")
c.setCode("KM") c.save()
a.setCity(c)
a.save()
render "数据保存成功"
}

这里要注意的是假设是关系型数据库,那么就不要忘记配置事务。遗憾的是级联保存用这个框架貌似有问题,另外要注意的是grail默认的级联保存和更新,可是不会级联删除除非配置的是双向关联(也配置了belongsTo).

接下来我也写了个方法,用来查询对于城市的区域信息:

  //查询城市信息
def queryCity(){ def city=CityInfo.findById(params.id)
Set<AreaInfo> area=city.getArea()
Iterator<AreaInfo> it=area.iterator()
def buf=new StringBuffer()
while(it.hasNext()){
AreaInfo info=it.next()
buf.append(info.getName()+",") }
render buf.toString()
}

要注意的是findBy是一个动态的查询方法,findById就表示通过Id来查询城市信息

grails一对多双向关联的更多相关文章

  1. JPA学习---第九节:JPA中的一对多双向关联与级联操作

    一.一对多双向关联与级联操作 1.创建项目,配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> < ...

  2. Hibernate从入门到精通(九)一对多双向关联映射

    上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映射,即在一的 ...

  3. Hibernate(九)一对多双向关联映射

    上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关 内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映 射,即在 ...

  4. Hibernate 一对多双向关联Demo

    以Classes[班级]和Student[学生]为例的Demo //Classes.java public class Classes implements Serializable { privat ...

  5. hibernate 一对多双向关联 详解

    一.解析: 1.  一对多双向关联也就是说,在加载班级时,能够知道这个班级所有的学生. 同时,在加载学生时,也能够知道这个学生所在的班级. 2.我们知道,一对多关联映射和多对一关联映射是一样的,都是在 ...

  6. JPA中的一对多双向关联与级联操作

    学习Spring有两周时间了 , 个人觉得服务端主要实现的是数据关系的维护和数据结构的制定 , 以及由业务需求产生的CRUD , 只要保证对前端提供的接口稳定高效响应 , 具体的前端实现完全不关心. ...

  7. Hibernate中用注解配置一对多双向关联和多对一单向关联

    Hibernate中用注解配置一对多双向关联和多对一单向关联 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射.在Hibernate3.3之前,需单独下载注解 ...

  8. 15.Hibernate一对多双向关联映射+分页

    1.创建如下数据库脚本 --创建用户信息表 --编号,用户名,密码,年龄,性别,昵称,手机,地址,管理员,图像地址 create table users ( id ) primary key, use ...

  9. Mybatis中使用association及collection进行一对多双向关联示例(含XML版与注解版)

    XML版本: 实体类: package com.sunwii.mybatis.bean; import java.util.ArrayList; import java.util.List; impo ...

随机推荐

  1. 【BZOJ2595_洛谷4294】[WC2008]游览计划(斯坦纳树_状压DP)

    上个月写的题qwq--突然想写篇博客 题目: 洛谷4294 分析: 斯坦纳树模板题. 简单来说,斯坦纳树问题就是给定一张有边权(或点权)的无向图,要求选若干条边使图中一些选定的点连通(可以经过其他点) ...

  2. Android项目实战_手机安全卫士软件管家

    ###1.应用程序信息的flags 1. int flags = packageInfo.applicationInfo.flags2. 0000 0000 0000 0000 0000 0000 0 ...

  3. html5——:hover事件触发自己的:afert伪元素事件

    :hover事件触发自己的:afert伪元素事件中间是没有空格的

  4. SQL Server2008 数据库日志清理

    USE [master] --运行master数据库 GO ALTER DATABASE HIS_MHYW SET RECOVERY SIMPLE WITH NO_WAIT --库 (dh_emr) ...

  5. nagios插件nagiosql安装配置

    nagios插件nagiosql安装配置 # Nagiosql install [root@Cagios ~]# yum install -y libssh2 libssh-devel [root@C ...

  6. jq购物车结算功能

    css *{font-style: normal} .gw{margin: 8px;} .gw::after{display: block;clear: both;content: '';margin ...

  7. OprenCV学习之路一:将彩色图片转换成灰度图

    //将一张彩色图片转成灰度图: //////////////////////////// #include<cv.h> #include<cvaux.h> #include&l ...

  8. [LUOGU] 4933 大师

    \(Orz\) \(ljt12138!\) 设状态\(f[i][j]\)表示以\(i\)为结尾,公差为\(j\)的长度大于\(1\)的数列有几个. 然后转移方程就很好想了. \(k=H[i]-H[j] ...

  9. Linux之网络文件共享服务(NFS)

    概念: NFS:Network File System 网络文件系统,基于内核的文件系统.Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote ...

  10. CentOS 7安装JDK 1.8

    1. 首先查看当前Linux系统是否安装Java ``` rpm -qa | grep java ``` 2. 如果列表显示有,则使用命令将其卸载 rpm -e --nodeps 要卸载的软件名 或 ...