【发布时间】:2012-03-19 13:13:22
【问题描述】:
我们正在尝试映射关系,其中一个实体具有一个映射,其中键是另一个实体,值是布尔值:
@Id Long id;
@ElementCollection
@CollectionTable(name = "APPROVALS_PRODUCT_APPROVALS", joinColumns = @JoinColumn(name = "PRODUCT_APPROVAL_ID", referencedColumnName = "ID"))
@Column(name = "EXCLUDED")
private Map<Approval, Boolean> approvals = new HashMap<Approval, Boolean>();
出于某种原因,Eclipselink 为地图中的每个值提供了 BigDecimal,而不是 Boolean。
approvals.get(testApproval); // returns a BigDecimal :-(
有什么不正确的地方吗?是我们,还是 Eclipselink 的 bug?
编辑: 试过这个(批准有 2 个@Id 字段):
@ElementCollection
@CollectionTable(name = "APPROVALS_PRODUCT_APPROVALS", joinColumns = @JoinColumn(name = "PRODUCT_APPROVAL_ID", referencedColumnName = "ID"))
@Column(name = "EXCLUDED")
@MapKeyJoinColumns({ @MapKeyJoinColumn(name = "CREDENTIAL_VALUE", referencedColumnName = "CREDENTIAL_VALUE"), @MapKeyJoinColumn(name = "CREDENTIAL_TYPE", referencedColumnName = "CREDENTIAL_TYPE") })
private Map<Approval, Boolean> approvals = new HashMap<Approval, Boolean>();
并得到相同的结果(BigDecimal 而不是 Boolean)
编辑2: 我们使用的是 Eclipselink 2.3.0,也尝试使用 2.3.2,结果相同。
【问题讨论】:
-
这太奇怪了。对我来说绝对看起来像一个错误。
APPROVALS_PRODUCT_APPROVALS表的 DDL 是什么? -
@ymajoros 映射与布尔值一起工作正常,我认为 Eclipselink 中没有错误。我在 eclipse 中试过这个。你能发布你的迭代器代码来获得批准键集吗?
-
@Tom 表是 eclipselink 在启动时生成的
-
@Riddhish 这肯定有问题。我什至没有迭代器,只是做了一个approvals.get(someApproval) 并有一个BigDecimal 实例。使用 Eclipselink 2.1.1
-
@DataNucleus docs.oracle.com/javaee/6/api/javax/persistence/… 示例 2 似乎暗示这是可能的。我们尝试指定 MapKeyJoinColumn,但收到关于缺少 JoinColumns 的奇怪错误
标签: java jakarta-ee jpa jpa-2.0