标签: grails-orm

禁用非关键Grails/GORM域类的锁定

假设Grails控制器中的以下代码:

def action = {
  ClassName o = ClassName.findByFoo(params.foo)
  if (o) {
    o.counter += 1
  }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,Grails通过默认version添加到所有GORM数据库表的列使用乐观锁定.但是,如果向此操作发送了足够多的多个并发请求,则乐观锁定机制将崩溃,并出现以下异常:

org.hibernate.StaleObjectStateException:
  Row was updated or deleted by another transaction (or unsaved-value mapping was 
  incorrect): [ClassName#id]
Run Code Online (Sandbox Code Playgroud)

对于失败的更新/删除完全不重要的域对象,我想禁用锁定机制,这样就不会抛出任何StaleObjectStateException.我如何实现这一目标?

grails hibernate grails-orm

1
推荐指数
1
解决办法
2326
查看次数

如何以通用方式在域类上调用GORM方法?

我编写了一个list()方法,用于检索与一组过滤器匹配的域类实例列表,该方法用于不同的域类; 除了调用GORM方法的类之外,代码完全相同:

Store => Store.createCriteria()
Client => Client.createCriteria()
等.

为了避免代码重复,我尝试通过创建泛型类来创建list方法的通用版本:

class QueryUtils<T> {

    def list(params) {
        T.createCriteria()
        [...]
    }

}
Run Code Online (Sandbox Code Playgroud)

这样,我的每个服务(StoreService,ClientService等)都可以扩展QueryUtils:

class StoreService extends QueryUtils<Store>
class ClientService extends QueryUtils<ClientService>
Run Code Online (Sandbox Code Playgroud)

依此类推,并继承与其域类类型对应的list()方法.

问题是在执行期间,它不起作用,因为T的有效类型是java.lang.Object,而不是我指定的域类类型:

groovy.lang.MissingMethodException:没有方法的签名:static java. lang.Object.createCriteria()适用于参数类型:()值:[]

你知道如何解决这个问题吗?

grails groovy grails-orm

1
推荐指数
1
解决办法
2081
查看次数

Grails域中的自定义16位ID生成器

我不想使用GORM创建的ID序列,而是使用16位随机数作为GORM创建的所有表的ID.我需要帮助才能做到这一点.我试过了

static mapping = {id generator:'uuid2'}

它没有用.帮助赞赏

grails grails-orm

1
推荐指数
1
解决办法
2599
查看次数

从ins.getClass()获取Item _ $$ _ javassist_165.getSimpleName()

我有三个实现复合模式的类,Item,Cluster和Element.

class Item extends Locatable {
  ...
}

class Cluster extends Item {

    static hasMany = [items:Item]

  ...
}

class Element extends Item {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我的域模型比这更复杂,但它只是一个例子.当我有一个Item实例时,我想知道它是一个簇还是一个元素,ins.getClass().getSimpleName()我得到一个奇怪的类名:Item_$$_javassist_165如果我这样做,println ins.toString()我会打印出正确的类名(toString方法返回this.getClass().getSimpleName()).

如何获得正确的班级名称?这个"Item_$$_javassist_165"班级名字是什么?

grails grails-orm

1
推荐指数
1
解决办法
485
查看次数

Grails域类以一对一的关系映射

我已准备好数据库表架构,我需要在我的Grails应用程序中使用它.

我在PostgreSQL中的表格:

CREATE TABLE "user" (
  id serial NOT NULL,
  login character varying(32) NOT NULL,
  password character varying(32) NOT NULL,
  email character varying(255) NOT NULL,
  date_created time with time zone NOT NULL DEFAULT now(),
  last_updated time with time zone NOT NULL DEFAULT now(),
  is_banned boolean DEFAULT false,
  CONSTRAINT "PK_user_id" PRIMARY KEY (id),
  CONSTRAINT "UN_user_email" UNIQUE (email),
  CONSTRAINT "UN_user_login" UNIQUE (login)
)

CREATE TABLE profile (
  "user" integer NOT NULL DEFAULT nextval('profile_id_seq'::regclass),
  first_name character varying(25) NOT NULL,
  middle_name character varying(25) NOT …
Run Code Online (Sandbox Code Playgroud)

grails grails-orm

1
推荐指数
1
解决办法
3805
查看次数

如何让grails'在记录中找不到异常?

我希望get方法在找不到记录时抛出异常.我不想测试结果是否为null.

grails grails-orm

1
推荐指数
1
解决办法
904
查看次数

Grails:是否可以阻止域类实例被持久化?

我想创建一个(一个)Domain类的实例(正如预期的那样,它有一个GORM接口到我的数据库)并且只用它作为传递数据的容器,就像Map对象一样.我想要绝对相信我的情况绝不会在数据库中得到持续.我担心,即使没有明确的调用,GORM也会以某种方式设法将它保存在场景后面的数据库中save().有没有办法在实例化我的对象时指定"不要持久 "子句?我知道如何防止域类的持久性,我想要的是仅防止对类的特定实例的持久性.

我现在的解决方案是创建一个groovy/src/包含相同属性和方法的类,并将其用作我的数据容器,并根据需要进行类型转换.感觉不对,干涩,干涩.

当然你也可以告诉我,我应该停止这么偏执,并且Grails永远不会在没有显式保存的情况下持久保存域类实例.

grails grails-orm

1
推荐指数
1
解决办法
2188
查看次数

Grails如何JSONify域对象,包括其嵌套域类?

我试图在grails中做一对多的域映射.这是两个类:

class TNDetails {

String tn
String tnpk

static hasMany = [iccid: ICCID]

static mapping = {
    table 'ni_tn'
    version false
    tnpk column : 'TN_PK'
    tn column: 'TN'
    id column: 'TN_PK',name: 'tnpk'
    }

}

class ICCID {

String sim
String customer
static belongsTo = [tn: TNDetails]


static mapping = {
    table 'ni_sim'
    version false
    sim column: 'ICCID'
    customer column: 'CUSTOMER'
    tn column: 'TN_FK'
    id column: 'SIM_PK'
  }
}
Run Code Online (Sandbox Code Playgroud)

相应的查询可以写成:select TN,ICCID from ni_tn,ni_sim where ni_tn.TN_PK = ni_sim.RELATED_TN and tn_pk=1290.当我通过传递tn_pk这样获取细节时,我的控制器中是否存在: …

grails groovy grails-orm

1
推荐指数
1
解决办法
2650
查看次数

如何在Grails中建模存储过程记录?

我需要调用一些返回各自记录的存储过程,这些记录不会直接映射到表或视图.

我过去使用过存储过程groovy.sql.Sql和普通(未建模)映射,但对于这个应用程序,我想用类似于域类的东西对这些记录进行建模,以便定义数据类型,数据绑定,验证,与其他实体的关联, 等等.

这样做的最佳方法是什么?

我应该将存储过程记录建模为正确的域类(实体),然后尝试禁用(或重新定义)其数据库持久性吗?怎么样?

我应该使用非域POJO来选择性地启用我需要的功能吗?(例如验证@Validatable)我如何处理关联呢?(当从SP返回的记录包含到某个其他持久实体的外键时,就会出现关联.)

grails stored-procedures grails-orm

1
推荐指数
1
解决办法
506
查看次数

如何获取grails中一列的所有数据?

我是grails的新手,我正在努力寻找解决方案,但我在这里没有发现任何问题......

我想做的是,我的域名中有这个标签:

    String platform
    String appVersion
    String name
    String id
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得appVersion列中存储的所有数据?

grails grails-orm hibernate-criteria

1
推荐指数
1
解决办法
1236
查看次数