【发布时间】:2010-12-12 08:07:10
【问题描述】:
我有一张 Voucher - POJO 映射到两个表。第一个映射分配实体名称“voucherA”并将 POJO 映射到 TableA。第二个映射使用“voucherB”作为实体名称,并将 POJO 映射到 TableB。
现在我还有一个客户 POJO 映射到 TableC。此 POJO 引用列表中的凭证。
<list name="vouchers" table="TableC_vouchers">
<key column="pid"/>
<list-index column="position" base="0"/>
<!-- how to do that right -->
<many-to-many column="voucher_id" entity-name="voucherB"/>
</list>
我如何正确地映射从客户到凭证的多对多关联列表,以便如果客户 POJO 被持久化,则如果 Voucher 实体不存在,则将其持久化到 TableB,而不是 TableA?这可以做到吗?如果不是,那么将客户使用的凭证保存到 tableB 的解决方法是什么? (TableA 只包含可用的 Vouchers,不包含已使用的 Vouchers)
【问题讨论】:
-
只是为了澄清一下,您是否对每种凭证都使用一张表格?将两种类型的凭证存储在一个表中会不会不可接受?
-
第二个表应该只包含那些已经使用的凭证。同样在我的情况下,不同用户可以多次使用一张优惠券。在我的问题中,TableA 可以理解为“仍可使用的优惠券”和 TableB“已使用的优惠券”。也可能发生 TableA 中的凭证被删除的情况。我不知道如何创建多对多关联。
-
我明白了。如果您在表中为每张凭证存储一个标志,如果使用凭证则为 true,否则为 false,这将是不可接受的。我认为这样你仍然可以随意删除未使用的,但你可以将所有凭证放在同一个表中,这使得多对多变得微不足道。
-
我的偏好是两张表解决方案,但如果这不可能或实施起来太复杂,我会选择一张表解决方案
-
感谢您的澄清。我认为这是最简单的路线。您可以在下面找到我的“官方”答案。
标签: java hibernate hibernate-mapping