【问题标题】:Grails - Using a VARCHAR2 field as table identifier - foreign key relationship failsGrails - 使用 VARCHAR2 字段作为表标识符 - 外键关系失败
【发布时间】:2011-06-20 05:19:35
【问题描述】:

我与旧版 Oracle 数据库集成,该数据库使用分配的 VARCHAR2 值作为主键。我正在与这个现有表创建一对多关系。旧表称为 Applications(我可能不会更改),新表称为 Projects。许多项目可以分配给一个应用程序。

当 GORM 创建 Project 表时,它正在为外键 application_id 创建一个 NUMBER 列,即使这是 Applications 表中的 VARCHAR2 字段。

class Application {
   static hasMany = [projects : Project];  // does not fix problem
   String application_id; 
   ...
   static mapping = {
      table 'applications'
      version false
      id (column:'application_id')
   }
   static constraints = {
      application_id(maxSize:16,blank:false,unique:true,type:"string",generator:"assigned")
   }
   ...
}

class Project {
   Application application;
   ...
}

当我编译应用程序时,我收到如下警告: 不成功:alter table project 添加约束 FKED904B1956694CB5 外键(application_id) ORA-02267: 列类型与引用的列类型不兼容

当我运行应用程序并单击应用程序控制器时,我收到此错误: SQL 状态 [99999];错误代码 [17059];未能转换为内部代表;嵌套异常是 java.sql.SQLException: Fail to convert to internal representation

当我点击项目 |创建我得到这个错误: 未能转换为内部代表;嵌套异常是 java.sql.SQLException: Fail to convert to internal representation at /project/create:172

那么如何设置 Project 类以期望应用程序的 VARCHAR2 外键?

感谢您的帮助!

【问题讨论】:

  • 为什么不使用'String'类型的id?

标签: oracle grails grails-orm


【解决方案1】:

看看这个site。也许对你有帮助。

【讨论】:

    【解决方案2】:

    这是 Application 类中的更正...以防其他人搜索:

    class Application {
       static hasMany = [projects : Project];  
       String application_id; 
       String id                  // <--- part of solution
    
       static mapping = {
          id column:'application_id',generator:'assigned'  // <--- part of solution
       }
    
       static constraints = {
          application_id(maxSize:16,blank:false,unique:true)  // <--- part of solution
          columns {                                           // <--- part of solution  
                    id type:'text'
                    application_id type:'text'
                  }
       }
    

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 2022-10-13
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多