gpt4 book ai didi

hibernate - 带有 PostgreSQL 的 Grails 不生成表

转载 作者:行者123 更新时间:2023-11-29 11:35:30 24 4
gpt4 key购买 nike

所以我有一些简单的域类,我确保它们没有使用任何 PostgreSQL(或任何其他供应商,就此而言)保留字。执行 grails schema-export 会生成一个 ddl,当针对同一数据库运行时,该 ddl 将成功执行,并毫无问题地创建所有表。

但是,在运行我的 grails 应用程序时,我收到错误消息 ERROR: relation "artist"does not exist。 (艺术家是我试图在 BootStrap.groovy 中创建示例的域)。

查看我的数据库,我可以看到没有为我的域创建任何表。

我已经为 org.hibernate 启用了所有日志记录,但没有任何迹象表明有任何问题。我能看到的唯一问题是没有与创建任何表相关的日志记录,只有看起来像是简单选择的示例查询。

这是我的 DataSource.groovy:

dataSource {
pooled = true
driverClassName = "org.postgresql.Driver"
dialect = "org.hibernate.dialect.PostgreSQLDialect"
username = "my_username"
password = "my_password"
}
hibernate {
cache.use_second_level_cache = false
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
development {
dataSource {
dbcreate = "create-drop"
url = "jdbc:postgresql://localhost:5432/dev"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:postgresql://localhost:5432/test"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:postgresql://localhost:5432/prod"
pooled = true
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}
}
}

我已经验证凭据(上面的假冒)是有效的,用户有权限,数据库在指定位置运行等。

有没有我遗漏的东西,或者我可以启用的任何其他类型的日志记录,它们可能会显示错误是什么,或者有助于找到它?

我觉得最好奇的是 schema-export 生成的 ddl 运行得很好。 grails 在运行时生成的 SQL 是否不同,或者是否有任何东西会导致 grails 不执行任何创建语句?

Grails 版本 2.1.1,PostgreSQL 9.2.1

根据要求启动:

import my.site.domain.artist.*

class BootStrap {

def init = { servletContext ->
System.out.println("\n")
log.info("---------------------------------------------------")
log.info("BootStrap initializing...")
log.info("---------------------------------------------------")
TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
log.info("Default TimeZone set to " + TimeZone.getDefault().displayName)

Artist artist = new Artist(artistName: 'Artist Name', shortBio: "Short Bio", biography: "Bio", url: "/some_artist")

artist.save()
if(artist.hasErrors()) {
log.info(artist.errors)
} else {
log.info("--Artist--")
log.info("dateCreated: " + artist.dateCreated)
log.info("lastUpdated: " + artist.lastUpdated)
log.info("mediumImageURL: " + artist.mediumImageURL)
}
}

def destroy = {
}
}

最佳答案

这可能是 pgsql 和 gorm 的特性,因为它涉及到 ID 的自动生成序列以及 id 是 pgsql 中的保留字。确保在您的域对象中使用类似 user_id 的内容(具有适当的表语法)而不是 id。

关于hibernate - 带有 PostgreSQL 的 Grails 不生成表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com