gpt4 book ai didi

java - JPA 2 : mapping a map where the key is an entity, 值为 boolean 值

转载 作者:行者123 更新时间:2023-12-01 15:29:10 25 4
gpt4 key购买 nike

我们正在尝试映射一个关系,其中一个实体具有一个映射,其中键是另一个实体,值是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com