我有以下类,需要手动增加nextId字段。
class SomeIdClass {
Family family
Integer nextId = 0
long timeCreated = new Date().time }
到目前为止,我一直在尝试检索和最新的数据库条目来增加它,我只是没有运气。或者我只是以完全错误的方式解决这个问题?
Thaks
ps:这是我尝试过但获取Package.SomeId对象列表
def si = SomeId.executeQuery(" from SomeId where nextId = (select max( nextId ) from SomeId) ")
答案 0 :(得分:4)
我在Grails的最后一行返回两分钱:
DomainClass.find("from DomainClass order by id desc")
答案 1 :(得分:2)
你可以这样做:
def maxNextId = DomainClass.executeQuery("select max(nextId) from DomainClass")[0]
如果没有看到整个背景,很难说出你在做什么,但另外,这看起来很可疑。将id分配给域对象的方法可能是错误的方法。但无论如何,如果在执行查询和使用值之间将新对象插入到具有更大nextId的数据库中会怎样?
答案 2 :(得分:2)
如何替换
long timeCreated = new Date().time
与
Date dateCreated
哪个grails会自动填充到您的域类?
然后你可以按照
的方式做点什么SomeIdClass.listOrderByDateCreated(max: 1, order: "desc")
另外,你知道默认情况下grails为每个域对象提供一个自动递增的id吗?
答案 3 :(得分:1)
为什么不使用序列?您可以使用对所有域类都是全局的序列,也可以为该域定义特定序列。你可以这样做:
static mapping = {
id generator: 'sequence', params: [sequence: 'some_name_sequence']
}
..如果由于某种原因你还需要一个nextId,你可以创建一个返回id值的get方法,如:
def getNextId() {
return id
}
如果你这样做,那么你需要将nextId定义为瞬态值。
这当然假设你不需要id和nextId是不同的。
答案 4 :(得分:1)
来自http://www.hsqldb.org/doc/guide/ch09.html#create_table-section
例如,使用函数IDENTITY()可以获得连接的标识列中的最后一个插入值(其中Id是标识列):
INSERT INTO Test(Id,Name)VALUES(NULL,'Test');
CALL IDENTITY();
因此,假设您正在使用HSQL,您可以这样做:
SomeIdClass.executeQuery("call identity();")
获取最后插入的ID并添加到其中。如果HSQL不是正确的路径,MySQL也有自己的类似功能。
此答案未经过测试。
答案 5 :(得分:1)
您可以这样简单地获取上次保存的值:
//works only if the primary key 'id' is non-composite
def lastEntry = SomeIdClass.last(sort: 'id')
//alternative method which will work even for composite primary key
def entryList= SomeIdClass.findAll{[sort:'id',order:'asc']}.last()
答案 6 :(得分:0)
// retrieve the last person
def p = Person.last()
//get the current id
def currentId = p.id
//increment the id manually
def nextId = currentId+1
You can also use the generator in the domain class mappings.
static mapping = {
table 'PERSON'
id generator: 'increment'
version false
}
答案 7 :(得分:0)
嗯,尝试
SomeIdClass.where {
// any criteria - or none
}.max('nextId').list()[0]
但是,您当然应该使用ID的序列生成器。