2

几天来,我一直在尝试从我的Grails应用程序连接到PostgreSQL数据库的旧表,但没有成功。

我想要的是

我想要的只是从我的 grails 应用程序中查询这个表(其中存储了用户),以检查登录凭据。用户登录 grails 应用程序,我必须检查提供的密码是否与存储在此表中的密码匹配。

由于我尝试访问的表称为“ user ”(这是一个关键字),因此我创建了一个别名视图“ users ”,这是我在 grails 中使用的,只是为了避免可能出现的问题。

下面我提供有关我的问题的其他信息,希望有人可以帮助我。

手动查询结果

在控制台中直接从 postgres执行select * from public.users时,我得到以下结果:

                id                    |   name    |           apikey          |          created           | about | openid |            password           | fullname |            email             | reset_key 
--------------------------------------+-----------+---------------------------+----------------------------+-------+--------+-------------------------------+----------+------------------------------+-----------
 ef8661be-6627-40e3-8b58-e78f3363680f | logged_in | this-is-an-api-key-sample | 2012-12-11 14:17:28.949515 |       |        |                               |          |                              | 
 0c49f23a-350c-43d9-a1ec-34057125acd7 | visitor   | this-is-an-api-key-sample | 2012-12-11 14:17:28.953194 |       |        |                               |          |                              | 
 591798d4-f85e-4bc2-a352-a41635c83653 | admin     | this-is-an-api-key-sample | 2013-04-10 15:08:47.104103 |       |        | thisisanencodedpasswordsample | admin    | username@email.com           | 
 25c8b15f-ec67-472b-b551-3c7112d4a2db | grails    | this-is-an-api-key-sample | 2013-04-10 15:12:44.257821 |       |        | thisisanencodedpasswordsample | grails   | username@email.com           | 

从我的 grails 应用程序中,我有以下文件:

用户域类

class User {
    String user_id
    String name
    String apikey
    String created
    String about
    String openid
    String password
    String fullname
    String email
    String resetKey

    static mapping = {
        version false
        autoTimestamp false
        table "public.users"
        resetKey column: "reset_key"
        created column: "created", sqlType: "timestamp without time zone"
        user_id column: "id", sqlType: "text"
        id name:  'user_id'
    }
}

数据源

dataSource {
    pooled = true
    dbCreate = "validate"
    logSql = true
    url: "jdbc:postgresql://192.168.1.100:5432/ecodata"
    driverClassName = "org.postgresql.Driver"
    dialect = net.sf.hibernate.dialect.PostgreSQLDialect
    username = "ecodata"
    password = "******"
}

POM 依赖项

    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>hibernate</artifactId>
        <version>2.1.2</version>
        <scope>runtime</scope>
        <type>zip</type>
    </dependency>

    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.1-901.jdbc4</version>
        <scope>runtime</scope>
    </dependency>

我在启动 grails 应用程序时遇到的错误是:

[...] 引起:org.hibernate.HibernateException:缺少表:用户 [...]

我希望有人可以帮助解决这个问题。提前致谢。

问候

4

1 回答 1

3

跟进:

我终于解决了这个问题!实际上这是我的错,虽然这是一个很难看到的棘手的错字......

在我的数据源中,您可以看到以下行:

url: "jdbc:postgresql://192.168.1.100:5432/ecodata"

但实际上应该是:

url = "jdbc:postgresql://192.168.1.100:5432/ecodata"

在调试 grails 与数据库的连接深度时,我意识到了错字。我看到除了数据源的 url 之外的所有内容都具有正确的配置。url 字段有一个默认的内存数据库值。这很奇怪......然后,再次仔细检查数据源,我看到的是冒号而不是等号。该死!我喜欢动态语言,但是这种错别字可能会非常令人沮丧……

第一个问题解决了。

另一个问题:hibernate_sequence错误(也解决了)

一旦我解决了前一个问题,就会出现另一个错误:

Caused by: org.hibernate.HibernateException: Missing sequence or table: hibernate_sequence 

在阅读了一下之后,我发现这个错误是由于对遗留数据库执行的验证而发生的。我解决了它删除了验证。这是通过评论以下行完成的(也在数据源中)

//    dbCreate = "validate"

我希望这篇文章可以在将来对某人有所帮助。这就是为什么我要发布解决方案,我最初遇到的问题和hibernate_sequence问题。

于 2013-05-06T14:00:49.943 回答