是否可以将域类映射到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'
}
}
}
答案 0 :(得分:0)
域类需要特定的表名和列名。如果您的视图使用不同的名称,您可以使用static mapping
告诉grails。域类还需要主键。如果您没有,可以使用composite id
创建密钥。