簡體   English   中英

JPA:保留地圖<String,Entity>

[英]JPA: Persisting a Map<String,Entity>

當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}批注的許多組合,但均未成功,我要瘋了……

謝謝!

由於您似乎想使用A.code值映射實體,因此@MapKey是您所追求的。 @MapKey允許您定義引用內的值以用作地圖的鍵。 如javadoc所述,它必須是唯一的,否則您將遇到問題。

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

看來問題與我在同一課程中使用的其他地圖有關:

@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設置為瞬態,則一切正常。 這對您有意義嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM