我正在尝试将我的grails应用程序从h2切换到PostgreSQL。我为达到目标所做的步骤:
>
更改数据源。现在看起来像:
dataSource {
pooled = true
driverClassName = "org.postgresql.Driver"
dialect="org.hibernate.dialect.PostgreSQLDialect"
username = "postgres"
password = "admin"
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
//url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
url = "jdbc:postgresql://localhost:5432/admin_panel"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:postgresql://localhost:5432/admin_panel"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:postgresql://localhost:5432/admin_panel"
pooled = true
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}
}
}
现在比赛开始了。我在GGTS中键入“run app”时出错。由于验证原因,我试图使用引导创建的对象无法初始化:初始化应用程序时出错:在save()过程中发生验证错误。
。这真的很奇怪,因为消息说对之前创建的对象的引用为空:对象的adminpanel中的Field error。组成部分字段“子页面”上的“文本”:拒绝的值[null]
。在这一行中,“子页面”不应该为空,所以我去pgAdmin III检查是否创建了该记录,在那里我注意到根本没有创建任何表。
如果应用程序连接到H2,Everything就会工作,但当我将其切换到postgres时,它就会开始崩溃。此外,当我从引导中删除所有内容时,应用程序将启动,我可以正常创建对象,但我仍然无法在pgAdmin中看到它们。你有什么建议吗?我还能查什么,或者为什么GORM在我使用PostgreSQL时不在我的应用程序中创建表?
提前谢谢。
编辑:
经过几次测试,我找到了问题的根源。。。PostgreSQL为每个表中的“id”列提供了一个奇怪的值。当我使用H2时,我的值是1。。在每个表中,在PostgreSQL中,我都有这样的东西:
table1
id:
1
2
3
-
7
8
9
table2
id:
4
5
6
-
10
11
正如您可能注意到的,不同表中的所有行的值都是可交换的,因此我不能有id为1的对象table1和id为1的对象table2。你知道为什么吗?
Grails/HiberNate使用Sequence
作为Postgres(或Oracle等)等数据库的对象ID。默认情况下,Grails使用共享序列(hibernate_sequence
)。所以所有对象都有uniq id,但对整个数据库来说是唯一的,而不是对每个表。
您可以将域配置为对域使用不同的序列,例如:
static mapping = {
id generator: 'sequence', params: [sequence: 'my_own_sequence']
}
另见
我的grails 2.1.0应用程序是在cloudfoundry中部署和运行的,使用mysql服务,昨天我做了一些更改,更新后无法再次运行。我没有对数据源进行任何更改。 通过查看tomcat日志,看起来数据库设置在部署时没有被覆盖,如文档中所述,并且存在一个异常消息“无法为连接URL“JDBC:h2:prodDb;MVCC=TRUE”创建类为“com.mysql.JDBC.driver”的JDBC
我有一个python应用程序,通过vertica python客户端与vertica数据库交互。目前没有连接池来管理连接,而是为每个请求打开一个新连接,然后在请求结束时关闭。然而,这种设计将花费处理并发请求的成本。此外,python应用程序在uwsgi和Nginx服务器上运行,以处理多个请求。 我想使用现有的连接池来处理从python到vertica的连接,但在python中似乎找不到像C3Po或
我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方
我正在使用Hibernate从Karaf 2.3连接到PostgreSQL。4容器,当我部署包时,有一个异常是javax。命名。NameNotFoundException osgi:service/javax。sql。DataSource/“(osgi.jndi.service.name=jdbc/postgresds)。 这是我的坚持。xml文件 这是我的blueprint.xml文件: 这是我
我有一个由组成的应用程序,它在网络连接更改时被调用(基本上,我只想在连接到某个SSID时调用某些URL)。 我在挂起OkHttp请求时遇到了一个奇怪的问题。有时请求立即得到处理,有时需要10或20秒。我已经尝试为使用的OkHttpClient设置连接、读写超时,但没有成功。请求是在电话连接到网络之后发出的。我也尝试在延迟2秒的seperate线程中激发请求,但这并没有改变任何事情。 货单中的接收者
问题内容: 我在GregorianCalendar类中遇到一个奇怪的行为,我想知道我是否真的做得不好。 仅当初始化日期的月份的实际Maximum大于我将日历设置为的月份时,才追加此值。 这是示例代码: 我知道问题是由于日历初始化日期是31天(可能是5月),与设置为2月(28天)的月份混淆了。修复很容易(只需在设置年和月之前将day_of_month设置为1),但是我想知道这确实是想要的行为。有什么