DBunit;表/列名称大小写敏感性混淆

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代码,你有什么想法吗?


看起来可能有一个关于这个问题的未解决的 bug。http://jira.unitils.org/browse/UNI-134 这是否与你遇到的情况相似? - Steve K
请展示您数据集的更大部分。 - Pascal Thivent
嗯,奇怪。你可能应该添加你正在使用的dbunit版本,但这看起来像是一个bug。我会将此发布到dbunit-user邮件列表中,并可能打开一个问题(http://sourceforge.net/tracker/?group_id=47439&atid=449491)。 - Pascal Thivent
我之前使用的是2.4.2版本,但是升级到2.4.7版本后结果依然相同。 - Jimmy
5个回答

2
您是不是正在尝试将已设置ID的客户端放入数据库中?ID列是只读的,只有数据库才能“写”入。

可能是这样,但如果我从testData.xml中删除“ID”部分,那么下一个字段“address1”会出现相同的错误。所有字段都是只读的吗? - Jimmy

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

这对我也有用。 - Greg

2

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

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

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


1
我遇到了相同的错误,幸运的是我们之前编写了一些其他的测试,发现在大多数教程中,xml写作格式是针对FlatXMLDataSet的,如果你正在使用XML数据集,则正确的版本应该如下所示,请查看底部链接以获取更多信息。
应该采用以下格式。
<?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列的Role表,但是在使用DBUnit运行时,它无法创建这些列(只创建了5列),因此它会抛出这个错误。解决方案:手动创建这个表以及其他3个关系表,这些表没有被Hibernate创建。


0

如果您将格式设置为flat,此错误将在mysql和hsql中消失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接