Grails - 使用VARCHAR2字段作为表标识符 - 外键关系失败

时间:2011-02-02 19:35:24

标签: oracle grails gorm

我与旧的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 add constraint FKED904B1956694CB5外键(application_id) ORA-02267:列类型与引用的列类型

不兼容

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

当我点击Project |时创建我收到此错误: 未能转换为内部代表;嵌套异常是java.sql.SQLException:无法转换为/ project / create:172

的内部表示

那么如何设置Project类以期望Application的VARCHAR2外键?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

看看这个site。也许它会帮助你。

答案 1 :(得分:0)

以下是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'
              }
   }