标签: grails-orm

在Grails中使用GORM时的并发性

假设我有一个使用原始SQL更新计数器的计数器函数:

 public void updateCounter() {
   executeSql("UPDATE counter SET count_value = count_value + 1 WHERE id = 1;");
 }
Run Code Online (Sandbox Code Playgroud)

数据库将确保按计划处理对计数器的两个并发调用 - 所有调用将以一个增量更新计数器,并且不会丢失更新.

而不是通过发出原始SQL命令执行此操作,我想使用GORM.这种天真的方式将是这样的:

 public void updateCounter() {
   Counter c = Counter.get(1)
   c.countValue += 1
   c.save()
 }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我假设如果两个线程同时调用updateCounter()方法,则更新可能会丢失.处理这种并发问题的正确"Grails/GORM方式"是什么?

concurrency grails hibernate transactions grails-orm

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

如何在Grails中实现"select sum()"

我有这样的关系:

class E {
  string name
  hasMany = [me:ME]
}

class M {
  float price
}

class ME {
 E e
 M m
 int quantity
}
Run Code Online (Sandbox Code Playgroud)

而且我讨厌迭代来实现这个目标:"获得ME中数量的总和乘以给定E的相应M的价格".

有关如何使用GORM/HQL实现它的任何提示?

提前致谢

grails hql grails-orm

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

MSSQL在GORM中的varchar(n)等价物

我想知道如果数据库是MS SQL 2005,是否可以设置VARCHAR列的大小.这是我的域名:

class UpdateTable {

    static mapping = {
        table 'UpdateTable'
        id column: 'UpdateFileId', generator: 'increment'
        version false
        fileName column: 'FileName', size: 50
    }

    String fileName
}
Run Code Online (Sandbox Code Playgroud)

请注意,它使用VARCHAR(255)生成"FileName"列.我想将它设置为VARCHAR(25).也试过这个,但它没有用

static mapping = {
    ..
    fileName column: 'FileName', length: 50
}
Run Code Online (Sandbox Code Playgroud)

感谢您的任何线索.

grails grails-orm

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

Groovy动态调用类和find方法不起作用?

我试图建立一个类似于的动态查询:

def domain = DomainName
def ids = 1
def domainClass = "$domain" as Class
domainClass.find("from ${domain} as m where m.job = ${ids} ").id
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

如果我正在尝试这个,一切都很好:

def domain = DomainName
def ids = 1
DomainName.find("from ${domain} as m where m.job = ${ids} ").id
Run Code Online (Sandbox Code Playgroud)

如何在find中使用动态域名类?

grails groovy grails-orm groovyclassloader

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

belongsTo multiple Domain

我有4个类,事件,问题,请求,另一个是附件.

每个域看起来像.........

    Class Incidents
    {
    // other fields
       static hasOne = [attachment: Attachment]

       static constraints = [attachment nullable:true]
    }

    Class Problems
    {
    // other fields
       static hasOne = [attachment: Attachment]

       static constraints = [attachment nullable:true]
    }

    Class Requests
    {
    // other fields
       static hasOne = [attachment: Attachment]

       static constraints = [attachment nullable:true]
    }

    Class Attachment
    {
    // other fields
       static belongsTo= [
                   incident: Incidents, 
                   problem: Problems,
                   requests: Requests
]

   static constraints = {
        incident nullable: true
        problem nullable: true
        requests …
Run Code Online (Sandbox Code Playgroud)

grails grails-orm grails-plugin grails-domain-class grails-2.0

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

Grails GORM:合并时的DuplicateKeyException

我有两个对象:UserResume.简历有一个User user字段.在我的代码中,我首先得到一个user对象并对其进行一些更改.如果Resume.findByUser(user)存在,我会收到简历并在那里做一些更改.
如果我打电话user.save(),resume.save()我得到一个例外,说会话中有同一个对象的另一个引用,所以我开始使用merge().

当我调用user.merge()数据时保存,但是当我调用时,resume.merge()我得到了这个异常:
org.springframework.dao.DuplicateKeyException: a different object with the same identifier value was already associated with the session: [com.wizard.security.User#36]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.wizard.security.User#36]

我不知道该怎么做.看起来问题出现在与之resume.user相同的对象中user.

我很感激你对这个问题的帮助,谢谢.

grails hibernate grails-orm

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

如何优化此GORM查询

我有一个查询,它进行2次数据库查询.我是GORM的新手,不知道如何使用条件或where子句或其他内容将其优化为1个查询.我也使用springsecurity并且具有用于登录安全性的User类.我有一个带有User对象的Profile类:

class Profile {
   User user
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,会话存储用户ID.当我想加载配置文件来更新它时,我的代码目前是:

def user = User.get(springSecurityService.principal.id) // 1st db query
def domainObject = Profile.findByUser(user) // 2nd db query
Run Code Online (Sandbox Code Playgroud)

我通过试验和错误尝试了一些查询变体,但似乎找不到不会产生错误的查询.这似乎是微不足道的.伪查询将"获取具有此用户ID的profile.user的配置文件".

grails hibernate grails-orm

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

grails/hibernate:如何在ID列上禁用自动增量?

默认情况下,当您在grails中创建域对象时,它会添加"id"列并将其设置为在DB中自动递增.

我想在创建/保存对象时提供id参数,而不是使用任何类型的生成(它用于少量静态数据,我希望将ID固定为我给出的值).

我还有其他好处,例如能够在内存中使用正确的ID创建对象,而不必从DB中读取它,然后使该对象与另一个对象成为"包含"类型的关系,如果这是有意义的.

Grails有id列的文档,但没有说如何禁用自动增量并允许将ID传递给域对象构造函数:

http://grails.org/doc/2.1.0/ref/Database%20Mapping/id.html

grails hibernate grails-orm

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

在grails中获取最后两条记录的有效方法?

我有域名说

class Content{

  String content
  Date dateCreated
  Date lastUpdated

}
Run Code Online (Sandbox Code Playgroud)

数据库中的内容记录很少.我想检索最新的两条记录.在Grails中查询两个最新记录的有效方法是什么?谢谢!

grails grails-orm

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

Grails域类属性更改未标记为Dirty

我的域类中有一个临时方法,它将更新类的属性.当我使用此方法时,类不会标记为脏并且不会保存.

class Major {
    String code
    String major

    static transients = ['update']

    def update(String newVal) {
        major = newVal
    }
}

Major major = Major.findByCode("ACAA");
major.update("NEW VALUE");
println("Is dirty? "+ major.dirty);  //Is dirty? false
Run Code Online (Sandbox Code Playgroud)

当我在方法之外更新属性时,它按预期工作,我可以保存

Major major = Major.findByCode("ACAA");
major.major = "NEW VALUE";
println("Is dirty? "+ major.dirty);  //Is dirty? true
Run Code Online (Sandbox Code Playgroud)

有什么理由不起作用吗?

Grails 3.3.1

GORM 6.1.6

grails grails-orm

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