サポート > リポジトリ > モデルの定義 > データベースの詳細
ja | en

モデルはデータベース内のテーブルに関連付けられます。この詳細を設定することができます。

「画面>その他>データベースの詳細」を指定することができます。

図1 データベースの詳細

標準では有効となっています。この場合、モデルに対応するテーブルが作成されます。
この設定を無効にすると、テーブルが用意されません。正確には、利用データベースに対して CREATE TABLE 文を発行しません。

既存システムのテーブルを再利用する場合や、テーブルの代わりにビューを用意するといった場合に利用できます。

テーブルを作成しないと設定した場合でも、テーブル定義(DDL)は用意されます。自動生成されたDDLファイルは以下のフォルダに保存されています。
wagbydesigner/webapps/wagbydesigner/WEB-INF/env/work/dbschema/createddl/

テーブルを作成し、かつ物理テーブル名を指定した場合、ここで指定されたテーブル名で CREATE TABLE 文を実行します。

テーブルを作成しないとし、かつ物理テーブル名を指定した場合、既存システムのテーブルを操作するようになります。

スキーマは指定できない

物理テーブル名にスキーマを含めることはできません。

代案として、データベースの「シノニム」が使う方法があります。例えば Oracle では、シノニムを使って別スキーマのテーブルを別名のテーブルとして扱える仕組みがあります。詳細はご利用のデータベースのマニュアルをご確認ください。

Wagbyはデータベースから読み込んだ値をメモリにキャッシュします。これによりデータベース操作回数を減らし、パフォーマンスを向上させています。標準ではキャッシュは有効となっています。

本設定を無効にすると、常にデータベースを操作して最新のデータを取得するようになります。パフォーマンスに影響があるため、理由がなければキャッシュは有効とすることを推奨します。

モデルのキャッシュ情報を定期的に消去する

ジョブを使ってモデルのキャッシュ情報を定期的に消去することができます。

1リクエスト間のキャッシュ7.9

キャッシュを無効にした場合でも、1リクエスト間(WebブラウザとWebサーバ間の通信のやりとり)で発生したデータベースとのやりとりはメモリにキャッシュされます。レスポンスを返した段階で、このキャッシュは自動的に消去されます。キャッシュ有効期間は非常に短いですが、若干のパフォーマンス改善につながります。

この「1リクエスト間のキャッシュ」を無効にすることもできます。この場合、常にデータベースから値を読み込むようになります。

設定方法

「画面 > その他 > データベースの詳細」で「キャッシュを有効にする」のチェックをはずしたとき、さらに「Javaソースコードの設定」にある「データベースのキャッシュを完全に無効にする」をチェックします。(標準ではチェックされていないため、1リクエスト間のキャッシュは有効となっています。)

図2 データベースのキャッシュを完全に無効にする

Wagby は標準で、SQL文における識別子の区切り文字を設定するようになっています。 詳細は「環境 > データベース > 識別子の区切り文字」をお読みください。

ロック方式」をお読みください。

既存テーブルを再利用する場合の注意点をまとめました。

  • 「テーブルを作成する」を無効とし、既存テーブル(またはビュー)名を「物理テーブル名」に記載します。
  • モデル内の項目は、既存テーブル(またはビュー)の項目と同じとなるようにします。物理カラム名や型も指定することができます。
  • パフォーマンスのため、Wagbyのキャッシュはできるだけ有効としてください。既存テーブルが更新された場合、Wagbyのキャッシュを定期的に再作成する方法があります。またはマテリアライズドビューを使う方法も有効です。
  • 既存テーブルが読み込み専用であれば、ロックについて考慮する必要はありません。既存テーブルをWagbyからも更新し、かつ既存システムからも更新される可能性がある場合、更新の競合を避けるため、ロックを考慮する必要があります。既存テーブルが楽観ロックに対応しており、かつ「バージョン管理用カラム」をもっている場合は、Wagbyの楽観ロックを利用できます。そうでない場合、Wagbyの悲観ロックテーブルを既存システムと共用することを検討してください。ロックの扱いは業務要件によって異なるため、実際の設計時にはWagbyエキスパート認定技術者へご相談ください。

トラブルシューティング

必須項目の扱い

Wagbyで定義したモデルで「必須」とした項目で、実際には既存テーブル(またはビュー)側に NULL が存在していないかどうかを確認してください。Wagby は必須項目では NULL は存在しないという前提であるため、NULL が見つかると正しくデータを取得できず、エラーになります。

日付型項目の扱い

既存テーブルで日付を文字列で定義している場合があります。例: yyyyMMdd の 8文字。この場合、Wagby のモデル定義でも文字列とするしかありませんが、日付型の範囲検索やカレンダー補助入力機能が利用できなくなります。回避策として、既存テーブルのビューを定義し、データベースの関数を使って文字列から日付型へ置き換えることを検討してください。ビューで日付項目となっていれば、Wagbyの日付型を利用できるようになります。