mssql の制限が 900 バイトであるため、インデックスのサイズを減らす必要があります。
セットとして宣言されたコレクションを持つクラスがあります。このため、主キーは、外部キーを含むすべての非 null 列で構成されます。この主キーから索引が作成されます。これらすべての列にインデックスを付ける必要はありません。
データ構造の設定全体を変更せずにインデックス サイズを縮小する方法はありますか?
周囲のクラス定義内のコレクションの現在の構成は次のとおりです。
<set cascade="save-update,persist,merge,refresh,replicate,evict,delete,delete-orphan" fetch="select" lazy="true" table="mySubsetTable" batch-size="1000" name="attributes">
<key foreign-key="FK_Mothertable">
<column name="number"/>
<column name="data"/>
</key>
<composite-element class="MySubsetElement">
<property name="type" length="200" not-null="true" type="class"/>
<property name="attribute" length="2000" column="attrValue" not-null="false"/>
<property name="myboolean" type="boolean">
<column name="myboolean"/>
</property>
<property name="anotherAttribute" length="200"/>
<property name="evenAnotherAttribute" length="200" not-null="true"/>
<property name="evenOneMoreAttribute" not-null="true">
<type name="SomeClass">
<param name="enumClass">someEnumClass</param>
</type>
</property>
</composite-element>
</set>
現在、xdoclet 注釈付きの hibernate 3.3.1 を使用しています。
/**
* Attributes of this matchable
*
* @hibernate.set table="mySubsetTable" cascade="save-update,persist,merge,refresh,replicate,evict,delete,delete-orphan" lazy="true"
* batch-size="1000" fetch="select"
* @hibernate.key foreign-key="FK_Mothertable"
* @hibernate.key-column name="number"
* @hibernate.key-column name="data"
* @hibernate.composite-element class="MySubsetElement"
*/
public Set<MySubsetElement> getSubsetElements() { ... }
あなたの提案に感謝します!
(そして、 http://docs.jboss.org/hibernate/を私に紹介しないでください 。私はすでにこれを見つけました。)
編集 サイズ制限に合わせてすべてのプロパティのサイズを縮小することはできません。外部キーで構成されるインデックスで十分です。また、すでに使用されている製品に取り組んでいるため、基礎となるデータ構造を変更しないソリューションが本当に必要です。