Oracle 将grails与遗留数据库一起使用
我面临着在遗留Oracle数据库中使用Grails的问题。我有主键文本列TARGETTYPECODE的旧表TARGETTYPES:Oracle 将grails与遗留数据库一起使用,oracle,grails,legacy-database,Oracle,Grails,Legacy Database,我面临着在遗留Oracle数据库中使用Grails的问题。我有主键文本列TARGETTYPECODE的旧表TARGETTYPES: CREATE TABLE "TMS"."TARGETTYPES" ( "TARGETTYPECODE" VARCHAR2(100) NOT NULL ENABLE, "TARGETTYPEDESCR" VARCHAR2(255 CHAR), "ACTIVE" CHAR(1) DEFAULT 'Y' NOT NULL ENABLE,
CREATE TABLE "TMS"."TARGETTYPES"
( "TARGETTYPECODE" VARCHAR2(100) NOT NULL ENABLE,
"TARGETTYPEDESCR" VARCHAR2(255 CHAR),
"ACTIVE" CHAR(1) DEFAULT 'Y' NOT NULL ENABLE,
CONSTRAINT "TARGETTYPES_PK" PRIMARY KEY ("TARGETTYPECODE")
)
我创建了grails域类:
package tmsconf
class Targettypes {
static transients = ['Targettypecode']
void setTargettypecode(String Targettypecode) {
id = Targettypecode
}
String getTargettypecode() {
return Targettypecode
}
String targettypedescr
String active
static mapping = {
table 'TARGETTYPES'
version false
columns {
id generator:'assigned', column:"TARGETTYPECODE", type:'text'
}
}
static constraints = {
id()
targettypecode(size: 1..100, blank: false)
targettypedescr(size: 0..255)
active(size: 1..1, blank: false)
id(nullable: true)
}
String toString() {
return "${targettypecode}"
}
}
我还创建了控制器类:
package tmsconf
class TargettypesController {
def scaffold = true
}
应用程序已成功启动
当我单击链接tmsconf.TargettypesController时,控制台中出现错误:
Error 2012-10-10 10:55:37,243 [http-bio-8080-exec-9] ERROR util.JDBCExceptionReporter - ORA-00918: column ambiguously defined
| Error 2012-10-10 10:55:37,305 [http-bio-8080-exec-9] ERROR errors.GrailsExceptionResolver - SQLSyntaxErrorException occurred when processing request: [GET] /TMSConf/targettypes/list
ORA-00918: column ambiguously defined
. Stacktrace follows:
Message: ORA-00918: column ambiguously defined
Line | Method
->> 445 | processError in oracle.jdbc.driver.T4CTTIoer
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 396 | processError in ''
| 879 | processError . . . . in oracle.jdbc.driver.T4C8Oall
| 450 | receive in oracle.jdbc.driver.T4CTTIfun
| 192 | doRPC . . . . . . . in ''
| 531 | doOALL in oracle.jdbc.driver.T4C8Oall
| 207 | doOall8 . . . . . . in oracle.jdbc.driver.T4CPreparedStatement
| 884 | executeForDescribe in ''
| 1167 | executeMaybeDescribe in oracle.jdbc.driver.OracleStatement
| 1289 | doExecuteWithTimeout in ''
| 3584 | executeInternal . . in oracle.jdbc.driver.OraclePreparedStatement
| 3628 | executeQuery in ''
| 1493 | executeQuery . . . . in oracle.jdbc.driver.OraclePreparedStatementWrapper
| 96 | executeQuery in org.apache.commons.dbcp.DelegatingPreparedStatement
| 55 | <init> . . . . . . . in grails.orm.PagedResultList
| 15 | list in tmsconf.TargettypesController
| 186 | doFilter . . . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1110 | runWorker . . . . . in java.util.concurrent.ThreadPoolExecutor
| 603 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 722 | run . . . . . . . . in java.lang.Thread
Error 2012-10-10 10:55:37243[http-bio-8080-exec-9]Error util.jdbceptionreporter-ORA-00918:定义不明确的列
|错误2012-10-10:55:37305[http-bio-8080-exec-9]错误。GrailExceptionResolver-处理请求时发生SQLSyntaxErrorException:[GET]/TMSConf/targettypes/list
ORA-00918:定义不明确的列
. 跟踪如下:
消息:ORA-00918:定义不明确的列
直线法
->>445 | oracle.jdbc.driver.t4cttiore中的processError
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|396 |进程“”中存在错误
|879 |进程错误。在oracle.jdbc.driver.T4C8Oall中
|450 |在oracle.jdbc.driver.T4CTTIfun中接收
|192 | doRPC。在“
|531 | oracle.jdbc.driver.T4C8Oall中的doOALL
|207 | doall 8。在oracle.jdbc.driver.T4CPreparedStatement中
|884 |在“”中执行命令描述
|1167 | oracle.jdbc.driver.oracle语句中的ExecuteMayBeDescripte
|1289 |在“”中执行超时
|3584 |执行内部。在oracle.jdbc.driver.OraclePreparedStatement中
|3628 |在“”中执行
|1493 |执行。在oracle.jdbc.driver.OraclePreparedStatementWrapper中
|96 | org.apache.commons.dbcp.DelegatingPreparedStatement中的executeQuery
| 55 | . . . . . . . 在grails.orm.PagedResultList中
|15 | tmsconf.TargettypesController中的列表
|186 | doFilter。在grails.plugin.cache.web.filter.PageFragmentCachingFilter中
|63 | grails.plugin.cache.web.filter.AbstractFilter中的doFilter
|1110 | runWorker。在java.util.concurrent.ThreadPoolExecutor中
|603 |在java.util.concurrent.ThreadPoolExecutor$Worker中运行
^722 |运行。在java.lang.Thread中
请帮忙,我哪里错了这应该可以:
package tmsconf
class Targettypes {
String targettypecode
String targettypedescr
String active
static mapping = {
version false
id generator: 'assigned', name: 'targettypecode'
}
static constraints = {
targettypecode(size: 1..100, blank: false)
targettypedescr(size: 0..255, nullable: true)
active(size: 1..1, blank: false)
}
String toString() {
targettypecode
}
}
现在可以在映射
块中使用名称
属性,因此不需要创建临时get/set对来包装id
我还删除了表名和列名设置,因为它们被设置为无论如何都会使用的名称,并删除了type:'text'
,因为Hibernate知道字段的类型,所以它可以将其用于列的类型
另外,我根据您显示的SQL为targettypedescr
添加了nullable:true
通常,当您试图映射到遗留数据库时,请使用脚本查看Hibernate认为表应该是什么样子。调整
约束
和映射
块,直到“足够接近”为止。非常感谢。否当我单击tmsconf.TargettypesController时,我会得到Targettype的记录列表。现在我可以创建记录了。但当我单击现有记录对其进行编辑时,会出现错误“找不到id为null的Targettypes”。