1

当 String 不是映射实体的键时,您能否帮助持久化 Map?例如:

class A {

   @Id
   long id;

   String code;
}

class B {

   @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
   @What magical combination of JPA annotations should I use here?! 
   Map<String,A> mapAByCode;

}

我尝试了很多 {@JoinTable,@MapKeyColumn,@JoinColumn,@JoinTable} 注释的组合都没有成功,我快疯了......

谢谢!

4

2 回答 2

0

由于您似乎想使用 A.code 值映射您的实体,因此 @MapKey 就是您所追求的。@MapKey 允许您在引用中定义值以用作地图的键。正如 javadoc 所述,它必须是唯一的,否则您会遇到问题。

  @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
  @MapKey(name="code")
  Map<String,A> mapAByCode;
于 2013-09-27T17:54:55.120 回答
0

似乎问题与我在同一个班级中使用的其他地图有关:

@Entity
class A {

  @Id
  long id;

  String code;
}

@Entity
class B {

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    @JoinTable(name = "B_MAPABYID", joinColumns = @JoinColumn(name = "B_ID"))
    @MapKey(name="id")
    Map<Long,A> mapAById;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    @JoinTable(name = "B_MAPABYCODE", joinColumns = @JoinColumn(name = "B_ID"))
    @MapKey(name="code")
    Map<String,A> mapAByCode;

}

此配置对我不起作用,但如果我将 mapAById 设置为瞬态,则一切正常。这对你有意义吗?

于 2013-09-28T05:38:52.683 回答