当前位置: 首页 > 知识库问答 >
问题:

Grails标准错误?对于id为复合外键的域:未找到列“ALIAS2X2_u2;.id”

宗政兴发
2023-03-14

问题在于以下查询。我想列出L中包含id为“I01”的I的所有LI:s。

查询:

def c = L.withCriteria {
  lis {
    i {                   
      eq("id","I01")                                 
    }
  }
}

未找到“I_别名2x2_.ID”列;SQL语句:选择此选项。id为id4_1_,这是。版本为版本4_1_uu,别名为1x1_uu。i_id为i1_7_0_,lis_别名1x1_u。l_id为l2_7_0_,lis_别名为1x1_。版本为版本7_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0。id=lis_别名1x1_x1。l_id其中((i_别名2x2_.id=?)[42122-164]

我的标准是否有问题,或者我的域名是否不正确?如果我在LI域中添加'long id'并注释掉'id:composite…'行,然后标准运行正常。

域名:

class L {
long id   
//can this hasMany be used here ? domain L is the other FK in LI domain
static hasMany = [lis: LI]

static mapping = {       
    lis: joinTable: false       
}

static constraints = {
}
}

import org.apache.commons.lang.builder.HashCodeBuilder

class LI implements Serializable {
//domain has only FK:s to L and I

static belongsTo = [l: L, i: I]

static mapping= {
    table "LI"
    id composite:['i', 'l']
    i column: 'i_id'
    l column: 'l_id'       
}

static constraints = {
}

boolean equals(other) {        
    if (!(other instanceof LI)) { return false }       
    other.l == l && other.i == i       
}

int hashCode() {        
    def builder = new HashCodeBuilder()
    builder.append l
    builder.append i
    builder.toHashCode()            
}
}

class I {
String id       
static mapping = {   
    table "I"       
    id generator:'assigned'
    version: false   
}   
static constraints = {
}
}

引导:

    I ii = new I(id:"I01").save(flush:true)           
    I ii2 = new I(id:"I02").save(flush:true)

    L l = new L().save(flush:true);           
    L l2 = new L().save(flush:true);       

    LI li = new LI(l:l,i:ii).save(flush:true)       
    LI li2 = new LI(l:l2, i:ii2).save(flush:true)

架构:

创建表I(id varchar(255)不为空,版本bigint不为空,d varchar(255)不为空,主键(id));创建表LI(i_id varchar(255)不为null,l_id bigint不为null,版本bigint不为null,主键(i_id,l_id));alter table LI添加约束FK97D312CFA外键(i_id)引用i;alter table LI添加约束FK97D328A1A外键(l_id)引用l;

编辑:

Sérgio的解决方案工作,但如果你有我这样定义的域名:

第一类{String id

static belongsTo=[A:a] //has only 'string id' column

static mapping = {   
    table "I"       
    id generator:'assigned'
    version: false   
}   
static constraints = {
}
}

那这就行不通了:

def c = L.withCriteria {
  lis {
    i {                   
      eq("a.id","A01")                                 
    }
  }
}

如果你只写:

def c = L.withCriteria {
  lis {
    i {                   

    }
  }
}

这将产生相同的原始错误。有点不对劲。

共有1个答案

岳彬炳
2023-03-14

我这里也有同样的错误。这是标准上的东西,但是写了一点不同的作品:

def c = L.withCriteria {
  lis {
    eq('i.id',"I01") 
  }
}
 类似资料:
  • 我在将OneToMany外键映射到复合主键时遇到问题。我已经尝试过很多解决方案,包括这个post@onetomany和复合主键?。 所以情况是: 因此,在Box实体中,我试图在Box和Color实体之间创建一个OneToMany映射。为此,我应该使用Color实体的复合主键吗?如果我试图将列连接到复合主键(就像我在Box实体中所做的那样),我确实会得到一个错误-无法定位逻辑列“locale”。 我

  • 这是我第一次尝试Android Studio。我安装了0.8.0,并更新到了0.8.2。一旦创建了一个项目,我就会得到错误消息: 错误:(1,0)未找到id为'com.android.application'的插件

  • 我更新了我的尝试,将一些内容保留为CHAR,但仍然得到一个类似的错误:第1行错误:ORA-02091:事务回滚ORA-02291:违反完整性约束(MMM1339.ITEMNO_PHAR_FK)-未找到父密钥 需求的外键都在不同的供应主键中有值,所以我不确定为什么仍然存在问题。

  • 我是Android开发的新手。我在这个项目中使用了Firebase,但在gradle:build过程中出现了这个错误 id为'com.google.gms的插件。未找到google服务。 这是我的build.gradle文件: 我也试着在依赖项中添加了这个 com.google.gmsgoogle-service: 3.0.0

  • 这是我第一次使用Grails,我定义了以下域类 但当我尝试运行应用程序或为这些域生成任何控制器时,它显示了这个错误 我找不到问题,在此之前,控制台向我展示了这样的东西,它无法创建表“产品”和“类别” 编辑 我只是简单地解决了将“HasMany”改为“HasMany”的问题。但现在我不知道为什么控制台会显示这个

  • 问题内容: 是否可以使用GORM标准执行“输入”标准。我正在寻找以下SQL的等效项 如果可能的话,我猜语法会像这样: 问题答案: Grails createCriteria文档包含一个使用子句的示例: 该文档包括以下说明: 注意:“ in”是一个时髦的保留字,因此必须用引号将其转义。