如何从grails

时间:2015-12-10 12:52:42

标签: hibernate grails gorm grails-2.0

我正在尝试从列表中删除项目。我有一个名为InvItem的表和另一个名为InvItemLoc的表。当我添加一个项目时,InvItem表的id被用作InvItemLoc表中的外键。但是当我删除一个项目时,子表格行不会被删除。现在我需要通过InvItem id生成一个InvItemLoc表的列表,该id目前在InvItem表中并且具有特定的组织。但是当我要检查它是否与带有InvItem表的InvItemLoc匹配时,它会给出这个错误 - > No row with the given identifier exists: [inv.InvItem#9666]。现在有人可以帮我这个吗?!!!这是我在下面的尝试::

def items = InvItemLoc.findAllByAaOrgId(aaOrg)
                List<InvItemLoc> found = new ArrayList<InvItemLoc>();
                for(InvItemLoc item : items){
                    def invItem = InvItem.findById(item.invItemId.id)
                    if(!invItem){
                        found.add(item);
                    }
                }
                items.removeAll(found);

它在此行给出错误&gt;&gt; def invItem = InvItem.findById(item.invItemId.id)

编辑::域

我的InvItemLoc域名如下&gt;&gt;&gt;

class InvItemLoc {
    static mapping = {
        ...
    }

    Long id
    InvItem invItemId
    ...

    static constraints = {
        ...

    }
}

InvItem域如下所示&gt;&gt;&gt;

    class InvItem  {
    static mapping = {
        ...
    }

    Long id
    ...

    static constraints = {
        ...
    }

        String toString() {
        ...
    }
}

1 个答案:

答案 0 :(得分:0)

您可以在域类之间创建one-to-many关联。当您删除父级时,Grails可以为您删除子级。 $ rake db:schema:load RAILS_ENV=production --trace ** Invoke db:schema:load (first_time) ** Invoke environment (first_time) ** Execute environment ** Invoke db:load_config (first_time) ** Execute db:load_config ** Execute db:schema:load -- enable_extension("plpgsql") -> 0.1872s -- create_table("users", {:force=>true}) -> 0.1565s -- initialize_schema_migrations_table() -> 0.0876s $ heroku restart Restarting dynos... done $ heroku open Opening appname... done $ heroku pg:psql ---> Connecting to HEROKU_POSTGRESQL_WHITE_URL (DATABASE_URL) psql (9.4.5, server 9.3.9) appname::WHITE=> \d List of relations Schema | Name | Type | Owner --------+-------------------+-------+---------------- public | schema_migrations | table | ownername (1 row) $ heroku run rails c Running rails c on appname... up, run.1689 Loading production environment (Rails 4.1.6) irb(main):001:0> ActiveRecord::Base.connection.tables => ["schema_migrations"] irb(main):002:0> 需要添加InvItemLoc静态属性,并删除belongsTo属性。 invItemId需要添加 hasMany 静态属性。

InvItem

创建

这会改变域类的创建和保存方式。

class InvItemLoc {
   ...
   static belongsTo = [item: InvItem]
}

class InvItem  {
    static hasMany = [locations: InvItemLoc]
    ...

}

简而言之,您将位置添加到项目中,然后保存该项目,从而保存位置。

删除

然后,您可以像这样删除:def loc = new InvItemLoc() // set loc properties. def item = new InvItem() item.addToLocations(loc) // Set other item properties. item.save()