我目前想知道如何在Grails框架之外使用Grails独立的Groovy ORM层.这样做有一个文档条目,但ZIP文件只链接到一个空页面.我下载了Grails 1.2-M3但我在文档中找不到任何内容.
有谁知道目前的状态是什么以及如何实现这一目标?
我的Grails 2.0应用程序定义了一个用户域对象:
class User {
static mapping = {
table "dt_user"
columns {
id column:'user_id', generator:'assigned', type:'string'
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在我的BootStrap文件中保存新用户时,如下所示:
def user = new User(id: "smith").save(failOnError:true)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
| Error 2012-01-13 10:09:42,659 [main] ERROR property.BasicPropertyAccessor - IllegalArgumentException in class: User, setter method of property: id
| Error 2012-01-13 10:09:42,660 [main] ERROR property.BasicPropertyAccessor - expected type: java.lang.Long, actual value: java.lang.String
Run Code Online (Sandbox Code Playgroud)
我也尝试将User类更改为:
class User {
static mapping = {
table "dt_user"
columns {
id column:'user_id', generator:'assigned', type:'string', name:'id'
}
}
String id
} …Run Code Online (Sandbox Code Playgroud) 假设我有一个名为"User"的域类,它可以跟随其他"User"对象.它这样做有一个字段指定为:
def hasMany=[followedUsers:User]
Run Code Online (Sandbox Code Playgroud)
我需要反向(找到跟随特定User对象的所有User对象)而不设置反向关系,因为它不是经常执行的用例.我尝试使用闭包做这样的事情:
User.findAll { it.followedUsers.contains(userInstance) }
Run Code Online (Sandbox Code Playgroud)
但这始终会返回数据库中的所有用户,无论他们的跟随状态如何.我尝试使用HQL,但也失败了.
有人能给我一个快速指针,指出最简单的方法吗?谢谢.
我有一个使用Grails 1.3.7的应用程序,我刚刚迁移到Grails 2.0.该应用程序使用自动dateCreated和lastUpdated字段来管理与创建和修改对象相关的时间戳.升级后,我收到以下错误:
| Running Grails application
| Error 2012-01-29 22:36:53,504 [Thread-8] ERROR util.JDBCExceptionReporter - ERROR: null value in column "date_created" violates not-null constraint
| Error 2012-01-29 22:36:53,510 [Thread-8] ERROR events.PatchedDefaultFlushEventListener - Could not synchronize database state with session
Run Code Online (Sandbox Code Playgroud)
在我的Domain Classes中注释掉上述字段会使问题消失.
有dateCreated与lastUpdated字段Grails的2.0被弃用?如果是这样,这是否意味着我必须编写代码来手动处理此功能或将代码移动到某种类型的插件,如audit-trail插件?
我有一个父域类,它有hasMany另一个域类.父域和子域类都具有lastUpdated和dateCreated字段.我的问题是,当我更新子域类时,我需要父域类来反映该更改并更新其lastUpdated字段.
Grails提供的父和子之间是否有任何映射或其他配置可以实现此功能?
更新
我将以下行添加到子域类:
def beforeUpdate = {
parent.lastUpdated = new Date()
}
Run Code Online (Sandbox Code Playgroud)
我还必须在控制器中确保当我更新一个孩子时,我还必须保存父母以保持新lastUpdated字段.这似乎工作正常,但我仍然想知道是否有映射或类似的东西会这样做.
让我们考虑两个Grails域示例类.
第一节课:
class Person {
String name
Integer counter = 0
static transients = ['counter']
}
Run Code Online (Sandbox Code Playgroud)
第二课:
class Vehicle {
String name
transient Integer counter = 0
}
Run Code Online (Sandbox Code Playgroud)
类Person和Vehicle之间的Integer计数器字段的GORM持久性或域类行为是否会有任何差异?
编辑:我知道Person类是Grails docs引用的好方法.但是我更喜欢Vehicle类的方式,因为在阅读代码时它似乎更容易被忽视.
有一个着名的例外:
org.hibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确):[my.Entity#123456]
当"行被另一个事务更新或删除"时,这是一种非常熟悉的情况.
但是什么意味着另一种可能性 - "未保存的值映射是不正确的"?如何故意重现这种情况?
Grails 2.2.0
我有以下安排的课程:
class A {
static belongsTo = [c: C]
B b
}
class B {
static belongsTo = [c: C]
}
class C {
static hasMany = [bbs: B, aas: A]
}
Run Code Online (Sandbox Code Playgroud)
如果我现在创建这些类的实例...
B b = new B()
A a = new A()
a.b = b
C c = new C()
c.addToBbs(b)
c.addToAas(a)
Run Code Online (Sandbox Code Playgroud)
...并尝试保存c ...
c.save()
Run Code Online (Sandbox Code Playgroud)
......我得到了org.hibernate.TransientObjectException Message object references an unsaved transient instance - save the transient instance before flushing: B.
我认为GORM所做的是首先将保存级联c.aas,然后它会绊倒a.b尚未保存的实例.因此例外.
现在 …
有没有办法告诉GORM不要坚持财产?我打算在我的User类上定义一个确认密码属性,我将用于验证,但不应该保留.
我正在使用Grails 2.1.1和MySQL 5.5.27 Community Server.
我需要一个Domain类字段生成一个TEXT或LONGTEXT列.
我觉得这很简单,我看过很多例子:
但是,我整晚都遇到了死胡同.我遵循了所有这些例子,似乎都没有工作(即使其他人报告它有效).
以下是我创建的域类示例:
class Coltest {
static constraints = {
description1 sqlType: 'longtext'
description2 sqlType: 'text'
description3 type: 'text'
description4 column: "longDescription", type: "text", nullable:true
}
String description1
String description2
String description3
String description4
}
Run Code Online (Sandbox Code Playgroud)
这是我在MySQL命令界面中得到的:
mysql> describe coltest;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| …Run Code Online (Sandbox Code Playgroud) grails-orm ×10
grails ×9
grails-2.0 ×2
hibernate ×2
cascade ×1
collections ×1
groovy ×1
mysql ×1
orm ×1
persistence ×1
transient ×1