DBUnit的;对表/列名称的区分大小写的混淆

时间:2010-02-05 21:08:34

标签: java case-sensitive dbunit mysql5

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

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代码,任何想法?

5 个答案:

答案 0 :(得分:2)

您是不是要尝试将已设置ID的数据库客户端放入? ID列是只读的,只有数据库可以“写”到它。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分: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创建的关系表。

答案 4 :(得分:0)

如果你使用format = flat

,这个错误就会消失了mysql和hsql