繁体   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