JPA - @OneToMany地图
2022-09-01 21:10:14
这似乎是一个足够普遍的情况,但作为JPA新手,我很难弄清楚这一点。我正在使用EclipseLink和PostgreSQL,但这应该只与JPA规范有关。
我有一个具有ID的表,然后是一堆其他列。还有另一个表的外键进入该表,也称为 。此表具有该复合键和表示区域设置的 varchar。PRIMARY
SECONDARY
PRIMARY
ID
SECONDARY
ID
因此,在实体中,我希望有一个类型的字段,其中键是表中的区域设置字符串,而条目是实体。我的类看起来像这样: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.
我尝试将引用的ColumnName添加到注释中(我不确定它应该是什么),但我得到了同样的错误。
按照建议,我尝试使用如下:@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字段。任何帮助将不胜感激。