MyBatis - DB无法识别Tablename

时间:2014-06-13 20:51:08

标签: postgresql mybatis

首先,我应该说我是使用MyBatis的新手。

我在运行任何SQL语句时使用MyBatis时遇到问题。 SQL语句正在发送到数据库,但表名不能在数据库中识别。

出于调试目的,我有一个非常简单的表定义为' clients'。 数据库是PostgreSQL。 相同的JDBC用户可以使用psql登录,并查看和查询数据库中的表,因此我认为该问题不应与权限相关。

对于我的简单测试,我运行的是一个非常简单的非参数化查询,但它失败了:

select * from clients

我打开Postgresql登录并看到以下内容。查询语句正在访问数据库,但它似乎无法识别表名。我在Java代码中也看到了基本相同的错误。

DEBUG:  StartTransaction
STATEMENT:  select * from clients
DEBUG:  name: unnamed; blockState:       DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0, nestlvl: 1, children: 
STATEMENT:  select * from clients
ERROR:  relation "clients" does not exist at character 15

对我来说,这似乎是一个问题,无论是权限还是没有正确使用dataSource。我认为,因为发送了正确的查询语句,大多数“映射器”都会被发送出去。 myBatis的接线没问题。

我的环境定义如下:

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="org.postgresql.Driver" />
            <property name="url" value="jdbc:postgresql://localhost:5433/testdb" />
            <property name="username" value="topuser" />
            <property name="password" value="resupot" />
        </dataSource>
    </environment>
</environments>

&#39; TESTDB&#39;是桌子的位置。它似乎正在进入数据库(因为条目写入postgres日志)正确但它没有查看testdb数据库。我认为这是因为当我没有连接到正确的数据库时,我在psql中发出这个查询语句时出现了类似的错误。

我还尝试更改查询以使用架构名称&#39; public&#39;,这是表的位置,但它以类似的方式失败:

select * from public.clients

Java代码就像:

sqlSessionTemplate.selectList(SELECT_ENTRY);

在Java中,我尝试在sqlSessionTemplate中获取dataSource以查看它是否在启动查询之前已正确配置,但是诸如url和username之类的信息不能从javax.sql.DataSource对象中检查。

尝试将其类型转换为org.apache.commons.dbcp.BasicDataSource以获取url配置,如在线某处建议的那样,但我只是遇到了类型错误。

添加了Mapper信息

<mapper namespace="testClient">

  <resultMap id="result_Client" type="clientData">
      <result property="id" column="id" jdbcType="BIGINT" javaType="long"/>
      <result property="clientName" column="clientName" jdbcType="VARCHAR" javaType="java.lang.String"/>
  </resultMap>

  <select id="selectEntries" resultMap="result_Client">
    select * from clients     
  </select>

</mapper>

添加了MyBatis Debug

  2014-06-13 12:37:36,801  DEBUG [java.sql.Connection] [http-bio-8080-exec-25] ooo Connection Opened
  2014-06-13 12:37:36,801  DEBUG [java.sql.PreparedStatement] [http-bio-8080-exec-25] ==>  Executing: select * from clients
  2014-06-13 12:37:36,801  DEBUG [java.sql.PreparedStatement] [http-bio-8080-exec-25] ==> Parameters:

添加了在Java中看到的错误

### Error querying database.  Cause: org.postgresql.util.PSQLException: ERROR: relation   "clients" does not exist
  Position: 15
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: org.postgresql.util.PSQLException: ERROR: relation "clients" does not exist
  Position: 15
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR:     relation "clients" does not exist
  Position: 15

0 个答案:

没有答案