将Oracle数据库视图映射到grails域类

时间:2014-08-07 22:10:04

标签: sql oracle hibernate grails groovy

是否可以将域类映射到Oracle数据库视图?

使用Grails 2.3.4创建的全新项目,并映射到视图,仅使用2列。我们尝试运行它时,会收到以下错误消息:

消息:ORA-00904:" THIS _"。" STUSTAT_STUDENTID":无效标识符

Line | Method
->>  112 | throwSqlException    in oracle.jdbc.driver.DatabaseError
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    331 | processError         in oracle.jdbc.driver.T4CTTIoer
|    288 | processError . . . . in     ''
|    743 | receive              in oracle.jdbc.driver.T4C8Oall
|    216 | doOall8 . . . . . .  in oracle.jdbc.driver.T4CPreparedStatement
|    799 | executeForDescribe   in     ''
|   1037 | executeMaybeDescribe in oracle.jdbc.driver.OracleStatement
|    839 | executeMaybeDescribe in oracle.jdbc.driver.T4CPreparedStatement
|   1132 | doExecuteWithTimeout in oracle.jdbc.driver.OracleStatement
|   3316 | executeInternal      in oracle.jdbc.driver.OraclePreparedStatement
|   3361 | executeQuery . . . . in     ''
|     55 | <init>               in grails.orm.PagedResultList
|     15 | $tt__index . . . . . in test.StustatController
|    195 | doFilter             in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter . . . . . . in grails.plugin.cache.web.filter.AbstractFilter
|   1145 | runWorker            in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    724 | run                  in java.lang.Thread

似乎这应该是可行的,但GORM或Hibernate可能无法映射到视图?我知道我们可以在控制器逻辑中编写一个Groovy SQL语句来显示内容,我已经这样做来验证我有读访问权限。那问题在哪里呢?

这里是映射到Oracle视图的域类。 编辑:

class Stustat {
String id
String firstName

static mapping = {
    sort "id"
    version false
    table 'stustat'
    columns{
            id column: 'stustat_studentid'
            firstname column: 'stustat_firstname'

    }
}

}

1 个答案:

答案 0 :(得分:0)

域类需要特定的表名和列名。如果您的视图使用不同的名称,您可以使用static mapping告诉grails。域类还需要主键。如果您没有,可以使用composite id创建密钥。