在JPA中是否可以映射一个map<String,List<Entity>>?

4
我在思考是否使用像 Map<String,List<Entity>> 或者 Map<Long,List<Entity>> 这样的地图会对我有所帮助,但是我找不到任何关于这种映射的例子。
我的问题是,在JPA标准中是否可能进行这种类型的映射,我应该使用什么样的注释?

2
请参见http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Nested_Collections.2C_Maps_and_Matrices。 - James
1个回答

1
答案显然是否定的,根据原始帖子中链接的评论,我也可以确认它在Eclipselink中不起作用。
我尝试创建一个嵌套的Map<String, List<>>,其中键是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有一些技巧来支持这个,但我没有测试过。我的猜测是 - 不行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接