我目前有以下3个域类:
User.groovy
class User {
...
static hasMany = [
...
]
static belongsTo = [
course : Course,
university : University
]
}
Course.groovy
class Course {
String title
static hasMany = [
universities : University,
users : User
]
static belongsTo = University
}
大学
class University {
String name
static hasMany = [
courses : Course,
users : User
]
}
我使用以下代码收集了大学的所有课程:
def courses = Course.withCriteria {
universities {
eq('id', Long.parseLong(params.universityId))
}
}
render courses as JSON
带有这样的示例响应:
[{
"class":"classifieds.Course",
"id":1,
"title":"Computer Science",
"universities":
[{"class":"University",
"id":1}],
"users":
[{"class":"User"
,"id":1}]
}]
我的问题是,我想将响应范围限制为不包括users
或universities
当前正在返回的值,而只courses
返回要在JSON中返回的列表。如何限制呢?
Course
在引导程序中注册所需的JSON对象编组器,如下所示:
//Bootstrap
def init = { servletContext ->
JSON.registerObjectMarshaller(Course){
def returnObj = [:]
returnObj.id = it.id
returnObj.title = it.title
returnObj
}
}
上面的寄存器仅返回Course
转换并呈现为JSON时的字段。请注意,这将永久封送Course,以仅返回其字段,而不返回其关联。如果暂时需要,那么您可以很好地遵循蒂姆的方法。
如果要使其对所有字段通用,则:
JSON.registerObjectMarshaller(Course){course ->
def fields = grailsApplication.domainClasses
.find{it.name == 'Course'}
.properties
.findAll{!it.association}
.name - 'version' //Remove version if req.
return fields.collectEntries{[it, course."$it"]}
}
提供grailsApplication
注入Bootstrap.groovy
另外,如果不是要修改JSON的构建方式,而是要调和标准结果,则可以使用projections
来获取所需的内容property
:
def courses = Course.withCriteria {
universities {
eq('id', Long.parseLong(params.universityId))
}
projections{
property('id')
property('title')
}
}
更新:
为了检索作为映射实体的结果,那么我将按照此处所示遵循HQL或使用createCriteria
并将结果转换为映射,如下所示(未经测试):
import org.hibernate.transform.Transformers
def criteria = Course.createCriteria()
criteria.resultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
def courses = criteria.list {
universities {
eq('id', Long.parseLong(params.universityId))
}
projections{
property('id')
property('title')
}
}
我不确定属性名称会创建别名。我遇到任何问题,都可以快速回退到HQL查询。
问题内容: 上面的查询将返回前10个等级。 如何修改,或者是否存在另一种语法来查询第10位到第20位? 问题答案: 这真的是基本的东西。您应该使用: http://dev.mysql.com/doc/refman/5.5/en/select.html 两个参数10,10是(Offset,Limit),因此它将检索第11-20行。 9,11将需要获得第10-20名。
问题内容: 我需要限制用户可以从中选择什么。 我似乎无法弄清楚如何限制分钟数,因此他们无法选择过去的日期。 如果我不能这样做,是否还有其他小部件可以让我具有这种灵活性? 问题答案: 根据我收到的建议,以下是我想出的方法:将可选日期限制为仅当日和之后。这适用于GWT 2.1.1 为了完整起见,以下是处理日期的辅助方法:
我有3张桌子: 学校之间存在一对多的关系- 我正在编写查询以获取特定学校的学生: 虽然我没有在规范查询或代码中的任何地方获取主题(如使用)。 我仍然可以在生成的查询中的日志中看到主题最终被获取。 我如何更新我的查询以仅限于学校 请建议。
我用图表js设置了一个折线图。在这张图中,我的点太大了,但这不是我的问题。有太多的点。 有没有办法限制点数? 每5分一分将是一个很好的解决方案。
我用图表js设置了一个折线图。 正如你所看到的,我有太多的数据点。有没有办法限制图表本身的点数,或者减少数据?此图的当前形式难以读取,对性能不利。
问题内容: 当用户单击HTML元素中的“浏览”按钮时,我想限制可以从本机OS文件选择器选择的文件类型。我有一种感觉,这是不可能的,但我想知道是否有_是_ 一个解决方案。我只想保留HTML和JavaScript;请不要使用Flash。 问题答案: 严格来说,答案是 否定的 。开发人员 无法 阻止用户上传任何类型或扩展名的文件。 但是,仍然可以使用的 accept 属性在OS的文件选择对话框中提供过滤