2

私は OpenJPA を使用しており、orm.xml を使用してマッピングを行っています。列名の長さが特定の文字数を超える特定のケースでは、SQLクエリの生成中にjpqlが列名を最大数の文字として生成します。

以下のようなマッピングがある場合

<entity name="OneOffSystemTemplateVariableValue" class="financing.tools.docgen.models.OneOffSystemTemplateVariableValue">
    <table name="modification_variable_values"/>
    <attribute-override name="id">
      <column name="modification_variable_values_id"/>
    </attribute-override>
    .....
   </attributes>
  </entity>

で簡単なクエリを実行するとOneOffSystemTemplateVariableValue、以下のようにクエリが生成されました

SELECT t0.**MODIFICATION_VARIABLE_VALUES_I**, t0.create_timestamp, t0.create_id, t0.last_update_timestamp, t0.last_update_id, t0.modification_object_id, t0.variable_name, t0.variable_value FROM Administrator.modification_variable_values t0 WHERE t0.one_off_template_id = ?

ここで MODIFICATION_VARIABLE_VALUES_ID列の場合、列名を MOD_VARIABLE_VALUES_ID に変更すると、クエリがうまく機能します。

そのため、生成されたSQLは完全な列名の長さを取りません。

maxColumnNameLengthアプリケーションのどこにも設定していません。

この問題に直面しないように、列名の長さの値を設定する方法を教えてください。

4

1 に答える 1

0

MySQL を使用している場合は、persistence.xml ファイルで次のプロパティを設定します。

openjpa.jdbc.DBDictionary=mysql(maxColumnNameLength=256)

その他のデータベースについては、OpenJPA のユーザー マニュアルを参照してください。また、使用しているデータベースを知りたいので、この最大列の問題を修正できるかもしれません.

于 2012-07-18T13:53:59.660 に答える