[英]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.