我正在尝试构建一个新的cordapp。并且构建因我的一个节点创建而失败,下面是节点相应日志中的堆栈跟踪
[1;31m[ERROR] 09:25:18+0530 [main] spi.SqlExceptionHelper.logExceptions - ERROR: relation "hibernate_sequence" does not exist
Position: 17
[m[1;31m[ERROR] 09:25:19+0530 [main] internal.Node.run - Exception during node startup
[m javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:886) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:860) ~[hibernate-core-5.2.6.Final.jar:5.2.6.Final]
at net.corda.node.services.network.PersistentNetworkMapCache.updateInfoDB(PersistentNetworkMapCache.ktI247) ~[corda-node-3.3-corda.jar:?]
如果我直接在数据库中创建hibernate_sequence
,则看不到此错误。 Postgres DB会发生此错误。
postgres驱动程序被添加到build.gradle中,
实现(“ org.postgresql:postgresql:42.1.4”)
通过为相应节点更新build.gradle中的任务deployNodes(),将节点配置为使用postgres,例如
node {
name "O=LedgerApp,L=London,C=GB"
......
extraConfig = [
'dataSourceProperties': [
'dataSourceClassName': 'org.postgresql.ds.PGSimpleDataSource',
'"dataSource.url"' : 'jdbc:postgresql://localhost:5432/postgres?currentSchema=appschema',
'"dataSource.user"' : 'corda',
'"dataSource.password"': 'corda'
],
'database' : [
'transactionIsolationLevel': 'READ_COMMITTED'
]
]
}
使用的Corda版本是3.3-corda。
答案 0 :(得分:0)
这似乎是一个错误。 hibernate_sequence
是Hibernate在启动时创建的第一件事,如果它在数据库中尚不存在。
我在这里提出了一个问题:https://r3-cev.atlassian.net/browse/CORDA-2393。
答案 1 :(得分:0)
如果您的PostgresSQL数据库为不同的Corda开源节点托管多个架构实例,则需要为在第一个实例之后添加的每个后续架构手动创建 hibernate_sequence 序列对象。 Corda OS不会为Hibernate提供架构名称空间设置,并且可能不会创建序列对象。
运行DDL语句,并将 my_schema 替换为您的架构名称空间:
CREATE SEQUENCE my_schema.hibernate_sequence INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 8 CACHE 1 NO CYCLE;