【问题标题】:Generic DAO search method通用 DAO 搜索方法
【发布时间】:2015-04-16 23:54:00
【问题描述】:

我有一个场景,其中有两个实体类。它们的结构就像

Class A{
Long id;
// some fields
}

Class B{
Long id;
Long associtedA;
// some field
}

实体 B 中的字段 associatedA 指的是 A.id 它们之间的关系是A一对多B

我需要获取 A 的列表以及与它们相关的 B 数据列表。

我尝试使用搜索来实现这一点。但我无法找到一些可行的解决方案。我也无法更改实体。

我可以通过检索所有 A 列表然后为每个 A.id 再次检索相关的 B 数据来实现这一点。但为此我必须循环调用服务,这是我不想要的。

这种情况有什么聪明的方法吗?

【问题讨论】:

  • 该字段associtedA 的类型为Long 但不是A 类型看起来像一个错误(误解了休眠映射概念)。您确定不能更改实体吗? (也许您可以更改类但不能更改数据库?)
  • 这不是错误!!!根据我的结构,它完全正确。在我的数据库中,这两个不是唯一的实体,还有其他实体。它们相互依赖。所以对于我的情况,这是制作它们的唯一方法。我无法在这里解释整个结构。但是这个映射支持我的数据库结构。 PS我在问题中已经提到我无法更改实体。

标签: java spring hibernate genericdao


【解决方案1】:

您可能想看看 JinQ (http://www.jinq.org) 然后你可以这样做:

streamProvider.streamAll(entityManager, B.class).join((a, source) -> source.stream(A.class)
.where(pair -> pair.getOne().id == pair.getTwo().id)
.select(pair -> pair.getOne())
.toArray()

认为这是最聪明的方法;)(当然,Lambda 表达式需要 Java 8)

【讨论】:

    【解决方案2】:

    抱歉,这些实体似乎是错误的。你在使用 JPA 吗?实体经理?

    如果您使用的是实体管理器(例如 Hibernate),B 类将是这样的:

    Class B{
      Long id;
      A associtedA;
      // some field
    }
    

    看到 B.associatedA 属于 A 类型。

    【讨论】:

      猜你喜欢
      • 2012-03-15
      • 2018-10-26
      • 2021-11-17
      • 1970-01-01
      • 2011-12-31
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      相关资源
      最近更新 更多