标签: grails-orm

GORM中的复合外键列

我需要在GORM中自定义复合外键的列名,我没有找到任何显示如何执行此操作的文档.我知道如何自定义PK列,以及如何自定义单列FK,而不是自定义多列FK.有可能吗?

谢谢.

mapping grails foreign-keys composite grails-orm

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

Grails,我如何得到一个不能保存的对象

我是grails的新手,并尝试创建一个表单,允许用户更改与他/她的帐户相关联的电子邮件地址.

它要求用户输入他们当前的密码以及他们想要使用的新电子邮件地址.如果用户输入了错误的密码或无效的电子邮件地址,那么它应该使用适当的错误消息拒绝它们.

现在,可以通过grails中的约束来完成电子邮件验证,但密码更改必须与其当前密码相匹配.我已将此检查作为服务类的方法实现.

见下面的代码:

def saveEmail =
{
    def client = ClientUser.get(session.clientUserID)
    client.email = params.email
    if(clientUserService.checkPassword(session.clientUserID , params.password) ==false)
    {
        flash.message = "Incorrect Password"
        client.discard()
        redirect(action:'changeEmail')
    }    
    else if(!client.validate())
    {
         flash.message = "Invalid Email Address"
         redirect(action:'changeEmail')
    }
    else
    {
        client.save();
        session.clientUserID = null;
        flash.message = "Your email address has been changed, please login again"
        redirect(controller: 'clientLogin' , action:'index')
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我发现奇怪的是,如果我输入了一封无效的电子邮件,那么就不会保存更改(如预期的那样)但是如果我输入了错误的密码和有效的电子邮件,那么它会保存更改,甚至将它们写回到数据库,即使它会给出正确的"无效密码"错误消息.

我很困惑,所以在所有if/else if/else块中设置了断点,发现它按预期命中了第一个if语句而没有击中其他语句,所以它永远不会遇到对save()方法的调用,然而它无论如何都得救了.

经过一些研究后,我来到了discard()方法的文档中,您可以在上面的代码中看到它.所以我添加了这个,但仍无济于事.我甚至尝试使用discard然后再次从DB重新加载客户端对象,但仍然没有骰子.

这是非常令人沮丧的,我会感激任何帮助,因为我认为这肯定不是一个复杂的要求!

java grails groovy grails-orm

11
推荐指数
2
解决办法
4174
查看次数

告诉GORM不要坚持财产

有没有办法告诉GORM不要坚持财产?我打算在我的User类上定义一个确认密码属性,我将用于验证,但不应该保留.

grails grails-orm

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

Grails createCriteria:通过一个空域类实例的字段查找对象

我在Grails的createCriteria中看到了一些意想不到的行为.我有一个看起来像这样的域类:

MyDomainClass {
    AnotherDomainClass anotherDomainClass
    static constraints = {
        anotherDomainClass(nullable:true)
    }
}
Run Code Online (Sandbox Code Playgroud)

我想找到MyDomainClass的所有实例,其中anotherDomainClass为null.所以我这样做:

return MyDomainClass.createCriteria().list {
    eq('anotherDomainClass', null)
}
Run Code Online (Sandbox Code Playgroud)

但是,我一无所获.

我究竟做错了什么?我可以看到有一些数据库条目,其中ANOTHERDOMAINCLASS_ID列确实为空(或空白,我无法分辨).

我可以直接创建一个引用ANOTHERDOMAINCLASS_ID列的查询,但我还没有找到方法.

谢谢!

grails grails-orm

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

grails删除表/域类中的所有数据,即"deleteAll"

我有一个域类,Widget,我需要删除所有实例 - 清除它.之后,我将加载新数据.你有什么建议这样做的机制?

PS注意这不是在自举时间,而是在"运行时".

grails grails-orm

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

访问grails/hibernate生成的域类SQL

在我的grails(1.3.7)应用程序中,我使用JDBC模板从CSV文件批量导入1000个记录(因为它比使用vanilla GORM/hibernate快得多,正如您所期望的那样).

例如

class Book {
    String title
}
Run Code Online (Sandbox Code Playgroud)

// For each CSV record...
insertStatementList.add("insert into book (id, title) values (nextval('hibernate_sequence'), thetitle)")
...
JdbcTemplate bulkInsert = ...
bulkInsert.batchUpdate(insertStatementList)
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是域类的更改(例如添加subject属性)需要更改域类和SQL插入语句.

由于GORM/hibernate堆栈最终必须从域类定义派生SQL,有没有办法访问此功能,以便我不必单独维护SQL insert语句?或者在伪代码中,类似于以下内容:

// would return something like:
// "insert into book (id, title) values (nextval('hibernate_sequence'), 'thetitle')"
def insertStatement = hibernate.getSqlInsertForClass(Book, book.properties)
Run Code Online (Sandbox Code Playgroud)

grails hibernate grails-orm jdbctemplate

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

Grails GORM MySQL生成TEXT或LONGTEXT列

我正在使用Grails 2.1.1MySQL 5.5.27 Community Server.

我需要一个Domain类字段生成一个TEXT或LONGTEXT列.

我觉得这很简单,我看过很多例子:

Grails域类,字符串字段TEXT和LONGTEXT

如何生成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)

mysql grails grails-orm grails-2.0

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

Grails GORM:无法初始化代理 - 没有会话

我有一个具有以下结构的方法:

public void run(){
    ... 
    for (...) { //this part works correct

        User.withTransaction {
            User user = User.findByUsername(...);

            Position pos = Position.findByName(...)
            if(pos){ ...
            } else { ...
                try{
                    pos.save(flush:true);
                    user.position = pos;
                } catch (Exception e){ ... }
            }
            ...
            try{
                user.save(flush:true, failOnError: true);
            } catch (Exception e){ ... }
        }
    }
    //this part doesn't work
    User.findAll().each {
    ...
        if (...){
            User.withTransaction{
                ...
                //here the operation fails with 
                //org.hibernate.LazyInitializationException: 
                //could not initialize proxy - no Session
                if (!userDetailsMap.containsKey(it.username) 
                         && …
Run Code Online (Sandbox Code Playgroud)

grails hibernate grails-orm

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

空白和空约束之间的差异

空白和空约束之间有什么区别?

我有以下课程

class Task {

    String title
    String notes
    TekUser assignedTo
    Date dueDate
    TekEvent event

    static constraints = {
        title blank:false
        notes blank: true , maxSize: 5000
        assignedTo nullable:true
        dueDate nullable:true
    }

    static belongsTo = TekEvent
}
Run Code Online (Sandbox Code Playgroud)

并且即使我指定了,创建的mysql表也将注释设置为not null notes blank : true

空白有什么影响:真的有吗?

grails grails-orm

11
推荐指数
2
解决办法
5354
查看次数

"where query"在生产中创建错误的SQL

我不得不将Spring从1.2.7更新到2.0,以及Grails从2.2.0更新到2.3.11.在解决了一些典型的更新问题之后,我开始为测试服务器构建一个WAR.一切似乎都好.但经过几次部署后,我遇到了一个问题.

有时(没有规则)服务器有100%的CPU使用率 - > OutOfMemeryError或应用程序抛出错误500.调试后,我注意到这些问题的原因是SQL查询不正确.

查询地点:

UserRole.find{role.authority =~ "%${authTxt}" && user.id == currentUser.id}
Run Code Online (Sandbox Code Playgroud)

创建这样的SQL:

select this_.id as id1_35_2_, this_.payment_enabled as payment_2_35_2_, this_.role_id as role_id3_35_2_, this_.user_id as user_id4_35_2_,
role_alias1_.id as id1_29_0_, role_alias1_.version as version2_29_0_, role_alias1_.authority as authorit3_29_0_, user_alias2_.id as id1_36_1_,
user_alias2_.version as version2_36_1_, user_alias2_.account_expired as account_3_36_1_, user_alias2_.account_locked as account_4_36_1_, 
user_alias2_.auto_password_flag as auto_pas5_36_1_, user_alias2_.email as email6_36_1_, user_alias2_.enabled as enabled7_36_1_, 
user_alias2_."password" as password8_36_1_, user_alias2_.password_expired as password9_36_1_, user_alias2_.user_info_id
as user_in10_36_1_, user_alias2_.username as usernam11_36_1_ from user_role this_ inner join role role_alias1_ on this_.role_id=role_alias1_.id …
Run Code Online (Sandbox Code Playgroud)

grails hibernate grails-orm grails-2.3

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