1

Hibernate SQL Query を使用してテーブル (MySQL データベース) からデータを読み取っています。問題は、テーブルにはHibernate Modelのcharにマップされた列が含まれており、この列が空の場合があるということです。そして、これが私の例外の由来だと思います。このエラーを発生させずに、char の列を hibernate モデルにマップするにはどうすればよいですか? ご回答ありがとうございます。


ご回答ありがとうございます。私の列はnull可能ではありません(私はMySQLを使用していますが、この列はNULLではありません)

if (str == null) {

適切です。

エラーは次のとおりです。

15:30:35,289  INFO CharacterType:178 - could not read column value from result set: LSFUS11_20_; String index out of range: 0

次の例外が発生します。

java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:558)

私はあなたの解決策を試すかもしれないと思いますが、次の場合:

if (str == "") {

null にすることはできないため、単なる空の文字列です。

あなたのピースコードをありがとう、私はそれを試すつもりです!

4

3 に答える 3

3

あなたの質問から、これを原始的なキャラクターにマッピングしていると思います。次回は、受け取ったスタックトレースを投稿してください (呼び出す場所を省略してもかまいません。プロジェクトが機密性が高すぎる場合は、休止状態のもののみを含めることができます)。

プリミティブ キャラクターにマップし、それが null の場合、プリミティブには null を割り当てることができないため、例外が発生します。

このクラスはこれを軽減します。「null」文字は「0」を表す文字として返されます。これを好みに合わせてカスタマイズできます。

import java.sql.ResultSet;
import java.sql.SQLException;

import org.hibernate.type.CharacterType;

public class NullCharacterType extends CharacterType {

    /**
     * Serializable ID generated by Eclipse
     */
    private static final long serialVersionUID = 1L;

    public NullCharacterType() {
        super();
    }

    public Object get(final ResultSet rs, final String name)
            throws SQLException {
        final String str = rs.getString(name);
        if (str == null || str.length() == 0) {
            return new Character((char) 0);
        } else {
            return new Character(str.charAt(0));
        }
    }
}

この新しいタイプを使用するには、休止状態のマッピングで、次のようなものを作成する前に:

<property name="theChar" type="character">

ここで、クラス名をタイプとして指定するだけです。

<property name="theChar" type="yourpackage.NullCharacterType">

ただし、ベスト プラクティスは、データベース マッピングにプリミティブ型を使用しないことです。可能であれば、char の代わりに Character を使用してください。そうすれば、null で問題が発生することはありません (null はラッパー型に割り当てることができます)。

于 2008-10-02T13:05:45.640 に答える
0

元の列のデータ型を変更するには、ネイティブ関数 LEFT または RIGHT を使用します

これがエラー select username from Users を与える SQL クエリであるとしましょう

次のように変更します:ユーザーからLEFT (username, 100 ) を選択します

数値はフィールドのサイズと等しくなければなりません

于 2011-03-23T16:31:45.833 に答える
0

mysql.jar(mysql-connector-java-5.1.7-bin) が lib ファイルに存在するかどうかにかかわらず、JBoss (サーバー) を検索します。mysql.jar私も同じ問題に直面しましたが、ファイルを追加した後は正常に動作しています。

于 2010-07-19T12:06:45.803 に答える