3

ログに次のようなエラーがあります。

ORA-01461: LONG列に挿入する場合のみLONG値をバインドできます

他に役立つ情報はありません。私はコードをフォローアップしようとしましたが、問題をグーグルで検索しましたが、問題を見つけた可能性があると思いますが、残念ながら私はOracleデータベースなどを実際には持っていません(コードさえ私には存在しません、私は書いていますこれはすべてメモリとメモから:( ) したがって、コード (および多くのグーグル検索) に基づいて推測できる唯一のことは、varchar2 への文字列のマッピングです。いくつかの環境情報:

Hibernate: 3.2.1.ga
Driver: ojdbc6-11.2.0.2.0.jar
Database: 11.2.0.2.0 - 64bit

テーブルには複数の varchar2 (300 バイト) と 1 つの varchar2 (4000 バイト) があり、これを最後の 1 つの TEXT と呼びましょう。エンティティを確認したところ、列の注釈で、これらのフィールドの値は 300 バイトに制限されており、TEXT (4000 バイト) フィールドも含まれています。それが1つの奇妙な点です。私の勝手な推測では、300 バイトより大きい文字列が来て、これが永続化しようとしたときにログに出力されるエラーです (コードがこのエンティティのインスタンスを永続化しようとするスタック トレース ポイント)。悲しいことに、私はそのログしか持っていません.. :(私の推測はありそうですか?それとも何か他のものになるのでしょうか?

エンティティ フィールドは次のとおりです。

@Column(name = "TEXT", nullable = false, length = varcharLength)
public String getText() {
    return text;
}

これがcreateステートメントです(とにかく重要な部分です):

CREATE TABLE "TABLENAME" 
   (
   "ID" VARCHAR2(300 BYTE) NOT NULL ENABLE, 
   "VERSION" NUMBER(10,0), 
   "TEXT" VARCHAR2(4000 BYTE) NOT NULL ENABLE, 
   "PUBLISH_DATE" DATE NOT NULL ENABLE, 
   PRIMARY KEY ("ID")
   );

(そして、テーブルには PUBLISH_DATE のインデックスがあります。それが関連している場合です。)

4

1 に答える 1

6

したがって、文字列が 4000 バイトよりも大きい場合の問題でした。列を CLOB に変更しました。これで解決するはずです。また、文字リテラルが 4000 バイトより小さい場合でも、varchar2(4000) であるかのように Oracle に格納されます。

于 2013-06-17T12:58:32.580 に答える