我在想如果我使用像Map<String,List<Entity>>
或Map<Long,List<Entity>>
这样的地图,它会帮助我处理一些事情,但我找不到任何例子来映射这种地图。
我的问题是,是否有可能在JPA标准中进行这种映射,以及我应该使用哪种注释?
答案 0 :(得分:1)
答案显然是否定的,根据对原始帖子的评论中的 link,我也可以确认它在我尝试过的 Eclipselink 中不起作用。
我尝试做一个嵌套的 Map
像这样:
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 有一些技巧来支持这一点,但我没有测试它。我的猜测是 - 不。
答案 1 :(得分:0)
是的,可以创建其中任何一个地图。为什么不试试并回答你自己的问题呢?这比在这里被动地询问要快。
对于JPA,我建议使用比Map更好的抽象来保存数据。这对我来说太通用了。这可能就是你想要的,但是JPA ORM应该映射到比集合更强大的对象模型。