2

何の役にも立たない答えを探すのに数日を費やしたという問題があります...

HiLo Id生成を使用しており、エンティティテーブルがhibernate_unique_keyテーブルと同じスキーマにある限り、すべてが正常に機能しているようです。

テーブルの構造は非常に単純です。データベースにdbo.hibernate_unique_keyとしてhi値テーブルがあります。いくつかのエンティティテーブルもdboスキーマにあり、問題なく機能します。次に、「Contact」スキーマの下にテーブルがあります(Contact.PersonやContact.Addressなど)。

個人マッピングファイル:

<class name="Person" table="Person" schema="Contact">
<id name="Id" unsaved-value="0">
  <generator class="hilo">
    <param name="max_lo">100</param>
  </generator>
</id>
...

Personエンティティを挿入しようとすると、「Invalid object name'Contact.hibernate_unique_key'」というエラーが表示されます。このエラーは確かに十分に明らかです。したがって、次のように追加します。

<param name="schema">dbo</param>

私のマッピングファイル/ジェネレータ要素に。これで、SessionFactoryをビルドすると、「同じキーのアイテムがすでに追加されています」というメッセージが表示されます。エラー。だから今、私は少し立ち往生しています。クラスからスキーマを取得するため、スキーマなしでHiLoジェネレーターを離れることはできません。また、スキーマが既に追加されているため(おそらく、XML cfgファイルで識別される「default_schema」であるため)、スキーマを指定できません。 )。

私はここで完全に馬鹿にされていますか?私もしなければならない

A)すべてのテーブルをdboスキーマに保持するか

B)DB内の一意のスキーマごとに個別のHiLoキーテーブルを作成しますか?

これらのシナリオはどちらも私のアプリケーションにとって特に好ましいものではないため、この問題に対処するためにマッピングファイルを「修正」できることを望んでいます。

4

3 に答える 3

2

データベースごとにそのようなテーブルは1つだけ存在する必要があります。このようなデータテーブルは、次の列を意味する必要があります(このテーブルをパラメータと呼びます)。

HiLoId
TableName
ParamName
HiLoAssigned

HiLo割り当てデータテーブルとして使用できるだけでなく、パラメータテーブルとしても使用できます。そのため、ParamNameフィールドは必須です。これには、次のようなデータが含まれる可能性があります。

HiLoId | TableName | ParamName | HiLoAssigned
---------------------------------------------
   1   | Parameters| HiLoId    |       3
   2   | Customers | CustomerId|    9425 
   3   | Invoices  | InvoiceId |  134978

また、テーブルの履歴を整理するジョブのパラメーターなど、他のパラメーターが必要な場合は、レコードの年齢パラメーターをそのパラメーターに挿入できます。

ええと、私はあなたが実際に尋ねたものより少し主題に遠いです。データベースの設計/アーキテクチャに関するいくつかの追加の考えを共有するだけです。

目を離してthis question、そこで私の答えを見てください。これはあなたの質問にも答えるかもしれません、そしてこの答えにさらなる情報をもたらすかもしれません。

于 2010-06-11T17:41:12.627 に答える
2

すべてのジェネレーター(すでにdboスキーマにあるものを含む)でテーブル名を使用してスキーマを指定しようとしましたか?

<param name="table">dbo.hibernate_unique_key</param>

hiloジェネレーターは「。」を探します。テーブル名にあり、そこにない場合にのみ(スキーマを使用して)修飾します。

于 2011-03-03T19:24:43.303 に答える
1

ソリューションBに問題はないと思います。動作はほとんど同じです。

于 2010-06-11T17:04:06.207 に答える