如何在JPA2中使用Map语义持久化Map

如何在JPA2中使用Map语义持久化Map,jpa,map,jpa-2.0,eclipselink,Jpa,Map,Jpa 2.0,Eclipselink,我有以下模型:类型A的实体与类型B、C的多对实体关联。每个B实体在A中最多显示一对,但同一个C实体可以显示多对。例如: A1 --> (B1, C1) --> (B2, C2) --> (B3, C1) A2 --> (B1, C3) --> (B2, C4) --> (B3, C4) 这遵循了存储在a中的java.util.Map的语义。此外,每个C仅为一个实体a显示,因此a到C的关系是一个实体a。我想保留这样一张地图,类似的例子

我有以下模型:类型A的实体与类型B、C的多对实体关联。每个B实体在A中最多显示一对,但同一个C实体可以显示多对。例如:

A1 --> (B1, C1)
   --> (B2, C2)
   --> (B3, C1)

A2 --> (B1, C3)
   --> (B2, C4)
   --> (B3, C4)
这遵循了存储在a中的java.util.Map的语义。此外,每个C仅为一个实体a显示,因此a到C的关系是一个实体a。我想保留这样一张地图,类似的例子出现在。据我所知,我下面的代码与示例基本相同:

@Entity
public class A implements Serializable {
    @OneToMany(fetch= FetchType.EAGER)
    @JoinTable(name="A_BC_MAP",
            joinColumns=@JoinColumn(name="A_ID"),
            inverseJoinColumns=@JoinColumn(name="C_ID"))
    @MapKeyJoinColumn(name="B_ID")
    private Map<B, C> pinnedCourses = new HashMap<Course, ScheduleTerm>();
    ...
}
_BC_映射的数据库模式如预期的那样出现,具有三列联接表A_ID、B_ID、C_ID。但是,主键约束由A_ID、C_ID对组成。因此,我不能像在映射中一样,在数据库中存储多个具有相同映射值C的映射键B

这是预期的行为吗?对于映射语义,我希望主键由A_ID,B_ID组成。我做错什么了吗


我目前正在使用EclipseLink 2.3.0。

我假设您正在使用EclipseLink定义DDL?您可以始终使用自己的DDL脚本


在OneToMany中有重复项是不常见的,但可能使用map键,您可以记录一个bug,让DDL生成将map键定义为主键而不是目标外键。

我假设您使用EclipseLink来定义DDL?您可以始终使用自己的DDL脚本


在OneToMany中有重复项是不常见的,但是可能使用map键,您可以记录一个bug,让DDL生成将map键定义为主键而不是目标外键。

是的,我使用EclipseLink,希望避免编写自己的脚本来修复这一项。我最好去哪里记录这样一个bug呢?是的,我正在使用EclipseLink,希望避免编写自己的脚本来修复这一项。我最好去哪里记录这样一个bug?