1

私は次の表を持っています

Table T { Number: T_ID, String: Type, Number : AnotherKey}

テーブルには複合主キー (ID とタイプ) があります。

クラスをロードする必要があります

class _T {
   Long T_ID;
   Map<String, Long> typeMap;
}

ここで、可能なすべての行が同じ T_ID を持つ場合、typeMap はマップです。

例を挙げると、行を考えてみましょう

ID      Type      Another Key
01       'A'      100
01       'B'      101
02       'A'      100
02       'B'      103

これは 2 つのクラス インスタンスにロードする必要があります

{01: {[A:100, B:101]}}, {02. {[A:100, B:103]}}

これを休止状態で設定する方法

4

1 に答える 1

3

_T次のように、目標を達成するためにクラスに注釈を付けることができます。

@Entity
public class _T implements Serializable {

  private static final long serialVersionUID = -5906661729869048121L;

  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long T_ID;

  @ElementCollection
  @CollectionTable(name="T",joinColumns=@JoinColumn(name="T_ID"))
  @MapKeyColumn(name="Type")
  @Column(name="AnotherKey")
  private Map<String, Long> typeMap;

  public Map<String, Long> getTypeMap() {
    return typeMap;
  }

  public void setTypeMap(Map<String, Long> typeMap) {
    this.typeMap = typeMap;
  }

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }
}

@ElementCollectionアノテーションを使用することもできますが、その場合、コレクションテーブルTには名前が付けられ_T_typeMap、結合列が呼び出され_T_T_ID、キー列typeMap_KEYと値列が呼び出されます- typeMap。グラフィック的には次のようになります。

Table _T_typeMap { Number: _T_T_ID, String: typeMap_KEY, Number : typeMap}

これを達成するには:

Table T { Number: T_ID, String: Type, Number : AnotherKey}

以下を追加します。

@CollectionTable(name="T",joinColumns=@JoinColumn(name="T_ID"))
@MapKeyColumn(name="Type")
@Column(name="AnotherKey")

また、コレクションテーブルの主キーとして結合列とキー列が選択されていることに注意してください。

于 2012-08-24T11:57:10.000 に答える