作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在尝试映射一个关系,其中一个实体具有一个映射,其中键是另一个实体,值是 boolean 值:
@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 中的错误?
编辑:尝试过这个(批准有 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,结果相同。
最佳答案
您的代码错误,
ElementCollection 上的 targetClass 用于指定可嵌入类(如果未使用泛型),因此不应使用。
如果您希望 Map 键是另一个对象,则还需要 @MapKeyJoinColumn(如果是 Embeddable,则还需要 @MapKeyClass。
大多数数据库没有 boolean 类型,因此 boolean 值通常存储为数字,0/1。所以你可能会以某种方式错过转换。您可以为此定义一个带有 @TypeConverter 的 @Convert,尽管它应该是默认的,因此您可能会为此记录一个错误。
关于java - JPA 2 : mapping a map where the key is an entity, 值为 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770836/
我是一名优秀的程序员,十分优秀!