4

启动应用程序时出现此错误

Caused by: org.dbunit.dataset.NoSuchColumnException: CLIENT.ID -  (Non-uppercase input column: ID) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive

我不太确定我为什么会得到这个,因为我的表/列名称都以大写形式引用(即使消息坚持这不应该是问题)

我的桌子:

mysql> describe CLIENT;
+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| ID               | int(11)      | NO   | PRI | NULL    | auto_increment |
| jdoDetachedState | tinyblob     | YES  |     | NULL    |                |
| NAME             | varchar(255) | NO   |     | NULL    |                |
| ADDRESS1         | varchar(255) | YES  |     | NULL    |                |
| ADDRESS2         | varchar(255) | YES  |     | NULL    |                |
| COUNTRY          | varchar(255) | YES  |     | NULL    |                |
| COUNTY           | varchar(255) | YES  |     | NULL    |                |
| MAINPHONENUMBER  | varchar(255) | YES  |     | NULL    |                |
| POSTCODE         | varchar(255) | YES  |     | NULL    |                |
| SECTOR           | varchar(255) | YES  |     | NULL    |                |
| TOWN             | varchar(255) | YES  |     | NULL    |                |
| WEBSITEURL       | varchar(255) | YES  |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)

mysql> 

我的域实体的片段:

@Id
@GeneratedValue
@Column(name="ID")
private Integer id;

我试图强制 DBUnit 使用的测试日期片段:

<dataset>
  <CLIENT ID="-1"
    ADDRESS1="Endeavour House"
    ADDRESS2="Russell Rd"
    COUNTRY="England"
    COUNTY="Suffolk"
    MAINPHONENUMBER="0845 606 6067"
    NAME="Suffolk County Council"
    POSTCODE="IP1 2BX"
    SECTOR="Local Government"
    TOWN="Ipswich"
    WEBSITEURL="www.suffolk.gov.uk"/>
</dataset>

我想不出其他可以尝试的方法,删除了表并重新编译了 java 代码,有什么想法吗?

4

5 回答 5

2

你不是想把ID已经设置的数据库客户端放到数据库中吗?ID 列是只读的,只有数据库可以“写入”它。

于 2010-02-05T21:34:42.913 回答
2

在向我的一个实体添加一列(使用内存中的 HSQL 数据库)后,我也遇到了这个问题。

我设法通过简单地删除之前生成的临时文件来解决这个问题:mem:testdb.log、mem:testdb.properties 和 mem:testdb.script

为什么会出现这个错误?=> 数据库模式存储在 mem:testdb.script 文件中,并且在修改实体时不会重新生成。

于 2012-01-06T11:55:58.490 回答
2

我已通过将提到的列添加到我的实体来修复错误。

于 2015-12-02T09:09:04.183 回答
1

我遇到了同样的错误,幸运的是我们之前编写了一些其他测试,发现在大多数教程中,如果您使用 XML 数据集,则编写 xml 的方式是针对 FlatXMLDataSet 的,那么正确的版本如下结帐底部的链接以获取更多信息。

它应该采用以下格式。

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <table>
        <column>id</column>
        <column>name</column>
        <column>department</column>
        <column>startDate</column>
        <column>endDate</column>
        <row>
            <value>999</value>
            <value>TEMP</value>
            <value>TEMP DEPT</value>
            <value>2113-10-13</value>
            <value>2123-10-13</value>
        </row>
    </table>
</dataset>

欲了解更多信息,请访问此链接。

http://dbunit.sourceforge.net/components.html#FlatXmlDataSet

又一次我在另一个项目中遇到这个错误,我们有一个模型类的层次结构,一些 hibernate 过去如何创建一个具有 7 列的表角色,但是在使用 DBUnit 运行它时它无法创建列(只创建了 5 个)因此它抛出了这个错误,解决方案:手动创建了这个表和另外 3 个不是由休眠创建的关系表。

于 2013-11-21T09:44:36.317 回答
0

如果你让 format = flat,这个错误会随着 mysql 和 hsql 消失

于 2010-09-08T21:04:01.393 回答