Ste*_*eve 2 grails hibernate h2
在Grails中,我可以在BootStrap中的内存dataSource中创建域对象,并将结果恢复正常,但是一旦应用程序启动(例如从GSP或控制器查询),我尝试运行查询,我得到:
org.h2.jdbc.JdbcSQLException: Table "FUNCTIONAL_DOC_TYPE" not found; SQL statement:
select this_.id as id1_0_, this_.version as version1_0_, this_.direction_id as direction3_1_0_, this_.functional_group_id as functional4_1_0_, this_.type_name as type5_1_0_ from functional_doc_type this_ [42102-147]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
at org.h2.message.DbException.get(DbException.java:167)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.command.Parser.readTableOrView(Parser.java:4562)
at org.h2.command.Parser.readTableFilter(Parser.java:1020)
at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1622)
at org.h2.command.Parser.parseSelectSimple(Parser.java:1729)
at org.h2.command.Parser.parseSelectSub(Parser.java:1616)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1461)
at org.h2.command.Parser.parseSelect(Parser.java:1449)
at org.h2.command.Parser.parsePrepared(Parser.java:401)
at org.h2.command.Parser.parse(Parser.java:275)
at org.h2.command.Parser.parse(Parser.java:247)
at org.h2.command.Parser.prepare(Parser.java:201)
at org.h2.command.Parser.prepareCommand(Parser.java:214)
at org.h2.engine.Session.prepareLocal(Session.java:425)
at org.h2.engine.Session.prepareCommand(Session.java:374)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1056)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:71)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:233)
at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:281)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:313)
at org.grails.datastore.gorm.GormStaticApi.findAll(GormStaticApi.groovy:374)
Run Code Online (Sandbox Code Playgroud)
我已经清理了构建
运行Grails 2.0.0
我有多个数据源到SQL服务器DB,它们只调用StoredProcedures,现在发现一个用例,使用好的旧Domain对象在内存存储中使用H2 ......错误只发生在
域上.
我运行dbconsole,找到的唯一表是标准的28
"内部"表...没有来自我的应用程序
一些来源:
DataSource.groovy的
// "Parent" datasource def
dataSource_messages {
pooled = true
driverClassName = "net.sourceforge.jtds.jdbc.Driver"
username = "user"
password = "secret"
readOnly = "true"
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
url = "jdbc:h2:mem:app_data;MVCC=TRUE"
pooled = true
driverClassName = "org.h2.Driver"
username = "sa"
password = ""
readOnly = false
}
dataSource_messages {
url = "jdbc:jtds:sqlserver://localhost:1433;DatabaseName=Messages"
}
Run Code Online (Sandbox Code Playgroud)
域类:
class FunctionalDocType {
String typeName
FunctionalGroup functionalGroup
DocDirection direction
static constraints = {
functionalGroup(nullable: true)
}
}
Run Code Online (Sandbox Code Playgroud)
BootStrap.groovy中:
new FunctionalDocType(typeName: 'Order', direction: buyerToSeller, functionalGroup: orders).save().save(flush: true)
// insert into functional_doc_type (id, version, direction_id, functional_group_id, type_name) values (null, ?, ?, ?, ?)
FunctionalDocType.findAll() runs:
// DEBUG SQL - select this_.id as id1_0_, this_.version as version1_0_, this_.direction_id as direction3_1_0_, this_.functional_group_id as functional4_1_0_, this_.type_name as type5_1_0_ from functional_doc_type this_
Run Code Online (Sandbox Code Playgroud)
并返回所有正确的值.
所以它就像内存中的tabes在某个地方引导后被删除但是没有被记录.
任何帮助赞赏.
谢谢,
史蒂夫
H2在最后一个连接关闭时关闭数据库.对于内存数据库,关闭连接意味着数据丢失...
所以,如果你一直打开一个连接,那么你应该没问题.你可以称之为"哨兵"连接.
另一个选择是使用持久数据库(数据库URL jdbc:h2:~/test/app_data;MVCC=TRUE
)
归档时间: |
|
查看次数: |
4150 次 |
最近记录: |