sql >> データベース >  >> RDS >> Mysql

Hibernateで長いデータを適切に処理する

    私が知っていることから、これを処理するロジックを追加しない限り、HibernateまたはMySQLが文字列を自動的に切り捨てる方法は実際にはありません。このようなものが存在しないと私が信じる理由は、データベースに挿入するように要求したものが実際に挿入されたものと異なることを決して望んでいないからです。

    私はあなたの唯一の選択肢は...

    だと思います
    1. 列の定義を変更します。 それをより大きなvarcharフィールドにするか、テキストフィールドにすることもできます。列の定義を変更するだけで数回クリックするだけでこれが修正される場合は、魔法のツールの作成に時間をかけないでください。これを行うことをお勧めします!

    2. ある種の傍受するアスペクトを使用しているのを見ることができました セッターを使用して、文字列がxの長さよりも大きい場合は、文字列のサイズを調整します。これは、コードでそれを処理する最も簡単な理由です。 DBを変更するオプションがなく、何千ものフィールドがある場合、これが私の次の選択肢になります。

    3. 文字列ユーティリティを作成する 文字列のサイズを変更できるクラス...

      setText(String val){this.text =StringUtil.truncate(val、size);}

    [更新] データベースを実際に更新することはできないので、文字列セッターをインターセプトしてその長さを確認する方法をお勧めします(構文がオフになっている可能性があり、これをテストしていません)...

    private static final MAX_SIZE_OF_STRINGS = 255;
    
    @Around("execution(* your.package.*.set*(..)) && args(java.lang.String)")
    public void checkAroundSetter(final ProceedingJoinPoint pjp)
        throws Throwable {
        Object[] args = pjp.getArgs();
        for (int i = 0; i < args.length; i++) {
            if (args[i] instanceof String && ((String) args[i]).size() > MAX_SIZE_OF_STRINGS) {
                args[i] = ((String)args[i]).subString(0,MAX_SIZE_OF_STRINGS) ;
            }
        }
        pjp.proceed(args);
    }
    

    また、一部のレイヤーが、各挿入時にテーブルに入力されるすべてのデータに対して定義された列サイズをチェックする必要がある場合は、追加のオーバーヘッドが発生します。



    1. PostgreSQLダンプファイルをPostgresデータベースに復元する方法は?

    2. Django 500内部サーバーエラー-不適切に構成されています:MySQLdbモジュールの読み込み中にエラーが発生しました:

    3. UnitilsとDBMaintainer-複数のユーザー/スキームでそれらを機能させる方法は?

    4. SQLServerでエラーメッセージ7325を修正する方法:「CLRタイプの列を公開するオブジェクトは分散クエリでは許可されていません」