java - JPA - @OneToMany 作为 map

标签 java jpa map one-to-many

这似乎是一个很常见的案例,但作为 JPA 新手,我很难弄清楚这一点。我正在使用 EclipseLink 和 PostgreSQL,但这应该只与 JPA 规范有关。

我有一张 table PRIMARY它有一个 ID,然后是一堆其他列。还有一张 table SECONDARYPRIMARY 中有一个外键表也​​称为 ID .这SECONDARY表有一个复合键 ID和代表语言环境的 varchar。

所以,在 Primary实体 我想要一个类型为 Map<String, Secondary> 的字段其中键是来自 SECONDARY 的语言环境字符串表和条目是 Secondary实体。我的Secondary类看起来像这样:

@Entity
public class Secondary
{
     @Id
     private Long id;
     @Id
     private String locale;
     private String str1;
     private String str2;
     .....
}

我想我想使用 @MapKeyJoinColumn注释,但我似乎无法让其他注释起作用。我试过这个:

@OneToMany
@JoinColumn(name="ID")
@MapKeyJoinColumn(name="LOCALE")
private Map<String, Secondary> secondaryByLocale;

这导致它试图选择一个名为 secondaryByLocale_key 的列,该列不存在。

然后我尝试了这个:

@OneToMany
@JoinTable(name="SECONDARY", 
        joinColumns={@JoinColumn(name="ID")},
        inverseJoinColumns=@JoinColumn(name="ID"))
@MapKeyJoinColumn(name="LOCALE")
private Map<String, Secondary> secondaryByLocale;

这会导致以下错误:

Exception Description: The @JoinColumns on the annotated element [field secondaryByLocale] from the entity class [class com.foo.Primary] is incomplete. When the source entity class uses a composite primary key, a @JoinColumn must be specified for each join column using the @JoinColumns. Both the name and the referencedColumnName elements must be specified in each such @JoinColumn.

我尝试将 referencedColumnName 添加到注释中(我什至不确定它应该是什么),但我遇到了同样的错误。

按照建议,我尝试使用 @MapKey如下:

@OneToMany
@JoinColumn(name="ID")
@MapKey(name="LOCALE")
private Map<String, Secondary> secondaryByLocale;

这会导致以下错误:

Exception Description: The map key [LOCALE] on the entity class [class com.foo.Secondary] could not be found for the mapping [org.eclipse.persistence.mappings.UnidirectionalOneToManyMapping[secondaryByLocale]].

也许我做错了,还有更好的方法来注释 Map 字段。任何帮助将不胜感激。

最佳答案

尝试使用 @MapKey(name = "locale") 代替。

@MapKeyJoinColumn 当您的 map 键是一个实体时使用,但这里您只使用语言环境字符串。

关于java - JPA - @OneToMany 作为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11789649/

相关文章:

java - 在不知道 List 类型的情况下,我们如何迭代 List 的元素?‽‽

java - 带有 EclipseLink 和 Java SE 的 JPA

java - Java 中新日期的混淆

java - 从我所有的 Controller 访问一个变量

jpa - Hibernate OGM vs. 昆德拉

c# - Visual C# 集合 "map"函数?

c++ - 我如何返回包含 C++ 中两个映射差异的 std::map?

data-structures - Redis 哈希 : How to Query on both Key and Value

java - 如何比较 IBM RTC 中的两个流?

java - 使用 Hibernate 从两个不同的 Web 应用程序 (GXT) 连接同一个数据库