1

我有下表

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

该表有一个复合主键(ID 和类型)。

我需要加载一个类

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

这里 typeMap 是一个映射,如果所有可能的行都具有相同的 T_ID

举个例子,考虑行

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将具有 name _T_typeMap, join 列将被调用_T_T_ID,并且 key 列typeMap_KEY和 value 列 - 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 回答