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

エンティティの 1 つに列を追加した後も、この問題が発生しました (インメモリ 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 に答える
2

IDが設定されたクライアントをデータベースに入れようとしていませんか?ID 列は読み取り専用で、データベースのみが「書き込み」できます。

于 2010-02-05T21:34:42.913 に答える
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

別のプロジェクトでもう一度このエラーに直面しました。モデル クラスの階層があり、休止状態で 7 列のテーブル Role を作成していましたが、DBUnit で実行中に列を作成できませんでした (5 つだけが作成されました)。したがって、このエラーがスローされました。解決策:このテーブルと、休止状態によって作成されなかった3つの関係テーブルを手動で作成しました。

于 2013-11-21T09:44:36.317 に答える
0

format = flat にすると、このエラーは mysql と hsql でなくなります。

于 2010-09-08T21:04:01.393 に答える