如何在JPA2中使用Map语义持久化Map
我有以下模型:类型A的实体与类型B、C的多对实体关联。每个B实体在A中最多显示一对,但同一个C实体可以显示多对。例如:如何在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。我想保留这样一张地图,类似的例子
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?