3

多くのテーブルを持つ Web アプリがあります (それぞれが POJO を表します)。各クラスのマッピング ファイルを作成し、Hibernate を使用SchemaExportしてデータベースにテーブルを生成しました。ここで、作成された既存のテーブルごとに 2 つの追加テーブルを作成します。

  • ユーザー権限テーブル- 各フィールドに固有の POJO に対するユーザー権限を格納します
    。各列は POJO のフィールドを表し、各行はユーザーを表し、各セルは「読み取り」、「書き込み」などの値を持ち、ユーザーの権限を表します。分野

  • データ履歴テーブル- すべてのデータ履歴をバージョン番号とともに保存します。
    このテーブルには、POJO テーブルに含まれるすべての列が含まれ、4 つの追加フィールド (データ オブジェクト バージョン、トランザクション GUID (主キー)、データスタンプ、およびこのトランザクションを実行したユーザー) が含まれます。

これらのテーブルが作成された後、Hibernate を介してこれらのテーブルにアクセスできるようにしたいと考えています。エントリを簡単に追加/削除/更新できるようにします。


私の質問

追加のテーブルのほとんどの列は、POJO テーブルと同じです。したがって、新しいテーブルを作成するのではなく、何らかの方法で POJO テーブルを参照する方がよいのではないかと思います。このようにして、POJO テーブルに新しいフィールドが追加された場合、これらのテーブルは自動的に変更されます。しかし、私はこれを行う方法を知らないようです。私はおそらくいくつかの方法があると思いました:

  • POJO テーブルを参照する hibernate マッピング ファイルを何らかの方法で作成します。
    たとえば、新しい POJOPermission.hbm.xml ファイルで POJO テーブルと同じフィールドを指定し、これらの新しいフィールドを追加します。
  • Hibernate でテーブルを作成する Java コードを記述します。
    たとえば、java.lang.Class を使用して POJO 内のすべてのフィールドのリストを返し、これらを繰り返し処理し、これらを新しいテーブルの列ヘッダーとして設定し、何らかの方法で呼び出すことができます。実行時にこれらのテーブルを作成するための休止状態

上記のいずれかを行う方法、またはこの問題を回避する方法を教えてください。この考え方は間違っているのではないかと思うのですが……。

ありがとうございました!!!

[編集 - 解決策]

最終的に XSLT を使用して、元の hbm.xml ファイルを新しいファイルに変換し、フィールド タイプなどを変更しました。また、hibernate.cfg.xml ファイルを指定して、新しく生成されたファイルを含めます。最後に、schemaexport を実行して、すべての Java ファイルをまとめて生成します...

4

3 に答える 3

0

「select into」を使用すると、基本的なテーブル構造のコピーを作成できます。制約やインデックスではなく、列とデータ型のみをコピーします。データのない構造のみが必要な場合は、レコードを返さない where 句を指定するだけです。

select * into targettable from sourcetable where 1=0
于 2009-03-04T05:18:57.240 に答える