当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}注释的组合但没有成功,我会发疯...
谢谢!
答案 0 :(得分:0)
由于您似乎想要使用A.code值映射您的实体,@ MapKey就是您所追求的。 @MapKey允许您定义引用中的值以用作映射的键。正如javadoc所述,它必须是唯一的,否则你会遇到问题。
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@MapKey(name="code")
Map<String,A> mapAByCode;
答案 1 :(得分: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设置为瞬态,则一切正常。这对你有意义吗?