簡體   English   中英

是否可以映射地圖<String,List<Entity> &gt; 在 JPA 中?

[英]Is it possible to map a map<String,List<Entity>> in JPA?

我在想,如果我使用Map<String,List<Entity>>Map<Long,List<Entity>>之類的Map<Long,List<Entity>>它會幫助我做一些事情,但我找不到任何示例來映射那種地圖。

我的問題是,是否可以在 JPA 標准中進行這種映射,我應該使用什么樣的注釋?

答案顯然是否定的,根據原始帖子評論中的鏈接,我也可以確認它在我嘗試過的 Eclipselink 中不起作用。

我試圖做一個嵌套的 Map<String, List<>> ,其中 key 將是一個 ISO2 語言代碼,這將有助於僅檢索滿足當前語言上下文的特定子關系子集。

像這樣的東西:

public class ProductEntity {

  @MapKey(name = "language")
  @OneToMany(mappedBy = "product", cascade = CascadeType.ALL, orphanRemoval = true,   fetch = FetchType.LAZY)
  private Map<String, List<AttributeEntity>> attributes;

}

public class AttributeEntity {

  private String language;

  @ManyToOne
  @JoinColumn(name="product_id")
  private ProductEntity product;
}

當您需要檢索特定語言的屬性(例如來自 REST Accept-Language 標頭)時,這將非常有用,因為您可以只使用getAttributes().get(currentLanguage)而不是編寫 NamedQueries 或進行流過濾。

至少對於 Eclipselink,當我嘗試這樣做時,我得到了一個無意義的錯誤:

IllegalArgumentException:對象:[com.my.project.AttributeEntity@745f] 不是已知的實體類型。

也許 Hibernate 有一些技巧來支持這一點,但我沒有測試它。 我的猜測是 - 不。

是的,可以創建這些地圖中的任何一個。 為什么不嘗試一下並回答您自己的問題呢? 這比在這里被動詢問要快。

至於 JPA,我建議使用比 Map 更好的抽象來保存數據。 這對我來說感覺太籠統了。 這可能是您想要的,但 JPA ORM 應該映射到比集合更健壯的對象模型。

暫無
暫無

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

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