我与旧的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外键?
感谢您的帮助!
答案 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'
}
}