gpt4 book ai didi

java - 具有一对多关联的 Hibernate 条件

转载 作者:行者123 更新时间:2023-11-29 09:19:24 26 4
gpt4 key购买 nike

我有一个 Order 实体(嗯,表示一个订单),每个订单都有一组 DeliveryDates。 我正在尝试实现搜索功能并在 JFace TableViewer 中显示结果。

我希望对于每个具有多个交货日期的订单,它应该在表中复制,但 DeliveryDate 列将显示此实例的具体交货日期。

这个查询很容易在 SQL 中使用简单的连接完成,并且行被复制,每一行都有不同的日期。 由于我正在执行搜索功能,因此我正在逐步构建查询(取决于用户选择的搜索参数),因此使用 Criteria 构建查询非常有用。问题是,我得到的结果列表是重复的(这没问题),但每个实体都只包含同一组 DeliveryDates - 因此我无法为同一订单的不同行打印不同的日期。

有什么方法可以使用 Critera 做到这一点吗?如果没有,我该怎么做?

编辑:编辑:例如,这个 HQL 查询似乎做了类似的事情:“select dd.deliveryDate, od from Order as od left join od.deliveryDates dd”

回答:我找到了解决方案:

    Criteria crit = session.createCriteria(Order.class)
.createAlias("deliveryDates", "dd")
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

我给 deliveryDates 集合一个别名,并使用 ResultTransformer 在 Map 中返回结果。搜索结果列表将包含具有两个键的映射,“this”(又名 Criteria.ROOT_ALIAS)和“dd”。这将为我提供我想要的行重复,现在我可以像这样获取相应的对象:

        Map map = (Map) element;
Order ord = (Order) map.get(Criteria.ROOT_ALIAS);
DeliveryDate dd = (DeliveryDate) map.get("dd");

最佳答案

重复条目(具有相同数据)的原因是结果行(重复行)具有相同的主键并且被 hibernate 相同对待。

作为解决方案,您需要确保为每个条目计算不同的 PK(尝试在此处使用投影)。

而且 HQL 可能是一个更容易的选择(在这种情况下我通常更喜欢 HQL)。

更好的解决方案:如果您可以将查询(至少是其中的一部分)转换为 View 并从中获取数据,那么大部分问题都将得到解决,这将是一个更好的设计。

关于java - 具有一对多关联的 Hibernate 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7383514/

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