web-dev-qa-db-ja.com

Hibernate Annotationを使用したテキストフィールド

文字列のタイプを設定するのに問題があります。

public void setTextDesc(String textDesc) {
    this.textDesc = textDesc;
}

@Column(name="DESC")
@Lob
public String getTextDesc() {
    return textDesc;
}

それが機能しなかったので、mysqlスキーマを確認しましたが、varchar(255)のままです。

@Column(name="DESC", length="9000")

または

@Column(name="DESC")
@Type(type="text")

タイプをTEXTにしようとしていますが、どんなアイデアでも大歓迎です!

47
bernardw

「mysqlスキーマをチェックしてもvarchar(255)のままです」-Hibernateがデータベースを自動的に変更することを期待していましたか?しません。 hibernate.hbm2ddl.autoが設定されていても、Hibernateが既存の列定義を変更するとは思わない。

新しいデータベース作成スクリプトを生成する場合、@Lobは、長さを明示的に指定しない場合(または、65536未満の場合)に「TEXT」型の列を生成する必要があります。 @Columnアノテーションで明示的に型を宣言することにより、いつでも強制できますが、データベース間で移植できないことに注意してください。

@Column(name="DESC", columnDefinition="TEXT")
84
ChssPly76

データベースで「文字列」タイプのデフォルトのマッピングを「テキスト」タイプに設定する方法があります。

エンティティがあるパッケージに次のファイルを保存します。パッケージ名も変更してください。

これにより、指定されたパッケージのデータベース内のすべての「文字列」型フィールドが「テキスト」型に設定されます。

package-info.Java

@TypeDefs({
      @TypeDef(name="string",defaultForType=Java.lang.String.class,typeClass=org.hibernate.type.TextType.class)
})

package com.package.app;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
1
user2049132