我有一个Auction域对象和一个User域对象.拍卖hasMany
用户.
我想做的,使用createCriteria
,是这样的:
def c = Auction.createCriteria()
def l = c.list (max: maxVar, offset: offsetVar) {
contains("users", thisUser)
}
Run Code Online (Sandbox Code Playgroud)
但是,contains
不在可接受节点列表中:createCriteria描述页面.
有没有办法实现这个功能?
要明确的是,有没有办法让条件是指定的User对象包含在Auction的集合属性中?
根据我的阅读,save()
通知持久化上下文应该保存或更新实例.但是,我在服务中有方法可以在不调用的情况下save()
更改域实例的属性,并且更改会立即出现在我的数据库中,没问题.
该save()
方法是否是一种更安全的方式,可以在进行更改(并使用failOnError映射捕获错误)后知道域实例将被更新?是应该在每次更改域实例的属性时使用它还是过度使用它?
我正在努力建立一个createCriteria
动态的.到现在为止还挺好:
obj
是我想要的域对象
rulesList
是一个地图列表,其中包含要搜索的字段,要使用的运算符以及要搜索的值
def c = obj.createCriteria()
l = c.list (max: irows, offset: offset) {
switch(obj){ //constrain results to those relevant to the user
case Vehicle:
eq("garage", usersGarage)
break
case Garage:
users {
idEq(user.id)
}
break
}
rulesList.each { rule ->
switch(rule['op']){
case 'eq':
eq("${rule['field']}", rule['value'])
break
case 'ne':
ne("${rule['field']}", rule['value'])
break
case 'gt':
gt("${rule['field']}", rule['value'])
break;
case 'ge':
ge("${rule['field']}", rule['value'])
break
case 'lt':
lt("${rule['field']}", rule['value'])
break
case 'le':
le("${rule['field']}", rule['value'])
break
case 'bw':
ilike("${rule['field']}", "${rule['value']}%") …
Run Code Online (Sandbox Code Playgroud) 我正在查看derby文档,发现LONG VARCHAR的描述是:
LONG VARCHAR类型允许存储最大长度为32,700个字符的字符串.它与VARCHAR相同,只是在创建此类型的列时无法指定最大长度.
我的问题是,这什么时候有用?在什么情况下我宁愿拥有一个我无法指定的最大长度的VARCHAR?
有没有办法可以从复选框中更改param映射中的值?我注意到,如果选中复选框,带有复选框的元素将在param映射中具有值"on",或者在元素名称前面有下划线作为param映射中的值,其值为""如果未选中该复选框.有没有什么办法可以改变这种行为,以便在检查时,如果选中了值为"true"并且值为"false"(最好在元素名称前面没有'_') ?
我正在尝试使用此站点作为参考来熟悉Grails 数据库迁移插件。我在尝试添加具有非空约束的属性时遇到问题。我按照网站上显示的方式对我的脚本进行建模(添加列,为现有记录设置默认值,然后向列添加不可为空的约束):
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340893788251-1") {
addColumn(tableName: "game") {
column(name: "genre", type: "varchar(255)")
}
grailsChange{
change{
sql.executeUpdate("UPDATE game SET genre = 'Other'")
}
}
addNotNullConstraint(tableName: "game", columnName: "genre")
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试更新我的数据库时,它默默地失败了。因此,我将三个更改拆分为三个不同的 groovy 脚本来追踪问题。
第一个文件(添加列)工作正常:
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "1340893788251-1") {
addColumn(tableName: "game") {
column(name: "genre", type: "varchar(255)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二个文件(为现有记录分配默认值)工作正常:
databaseChangeLog = {
changeSet(author: "Ryan (generated)", id: "defaultValue") {
grailsChange{
change{
sql.executeUpdate("UPDATE game SET genre = 'Other'") …
Run Code Online (Sandbox Code Playgroud)