1

エンティティがあるとします:

@Entity
public class AnEntity implements Serializable{
   @ElementCollection
   private List<String> strings = new Vector<String>();
// other stuff
}

私はEclipseLink(JPA 2.0)を使用しています。

このリスト内の文字列は、多くの AnEntity オブジェクトで同じ値を持つ場合があります。つまり、多くの AnEntity オブジェクトが同じ文字列を参照する可能性があります。

問題は、@ElementCollection が提供するデフォルトのマッピングが文字列のテーブル (ANENTITY_STRINGS) に多くの重複を残すことです。文字列のリストを保存するときに値を一意に保存して、重複する文字列の膨大なテーブルがないようにするにはどうすればよいですか?


文字列である単一のメンバーを持つ「プレースホルダー」クラスを使用しようとしたことを追加する必要があります。残念ながら、このようにすると、関連付けられたテーブルのデータが完全に読み取れなくなります。blob または lob として保存されているはずです。したがって、たとえば、リストを使用する代わりに、次のようなことを行いました。

@ElementCollection
@ManyToMany
private List<StringWrapperClass> strings = new Vector<StringWrapperClass>();

そして、私のエンティティは次のようになります。

@Entity
public class StringWrapperClass implements Serializable {
    private String string;
   // other stuff, getters, setters, id, etc
}

しかし、私が言ったように、それは ANENTITY_STRINGS にちょうどバイトを入れます。これが「正しい」方法だとは想像できません。

4

2 に答える 2

1

したがって、それぞれAnEntityが多くの文字列を持ち、各文字列が多くの AnEntities に属することができるマッピングを作成する必要があります。次に@ManyToMany、多対多の関係であるため、を使用する必要があります。

于 2010-02-02T15:54:56.223 に答える
0

Vectorを使用する代わりに、HashSet

したがって、おそらく次のようにします。

private Set<String> strings = new HashSet<String>();
于 2010-02-02T15:52:23.250 に答える