【问题标题】:Using annotations to implement a static join in hibernate在hibernate中使用注解实现静态join
【发布时间】:2010-12-16 12:35:27
【问题描述】:

我对休眠比较陌生,想知道是否有人可以帮助我。 虽然我使用

在休眠中的多个列上实现正常连接没有问题
@JoinColumns
标签,当我试图在注释中实现以下查询时,我很难过: 从表 A 中选择 A.* 左外连接表 B ON A.UID = B.ID AND B.NAME = '杰伊'

如您所见,连接也是基于一个不是列的值 ('JAY')。我不知道如何在注释中进行这样的映射。

有人可以帮忙吗?

谢谢, 周杰伦

【问题讨论】:

    标签: java hibernate join annotations


    【解决方案1】:

    您不需要将 b.name 指定为连接条件。而是将其指定为 where 子句的一部分。

    SELECT A.* 
    FROM TABLEA A 
    LEFT OUTER 
    JOIN TABLEB B ON A.UID = B.ID 
    WHERE B.NAME is null or B.NAME = 'JAY'
    

    【讨论】:

    • 这不是同一个查询。 是同一个查询,如果所需的连接是内连接,而不是左外连接。
    • 这仍然是不正确的,除非 b.name 被限制为不可为空,因为它将从 B 返回 name 为空的行;原始查询不会。
    • 我不明白。如果它是内连接,则不会返回表 b 中的可为空值……但如果是左外连接,则将返回表 2 中的可为空结果。你似乎在暗示一些第三种选择。既不是内连接也不是外连接。
    • 不,我在“暗示”在“LEFT JOIN ... ON ...”和“WHERE ...”子句中指定条件之间存在差异;将“OR ... IS NULL”添加到“WHERE”没有帮助。这并不重要 - OP 在问题中指定了 SQL 查询;我不太确定你为什么要尝试以不同的形式重写它,但我认为这不是他要求的。
    【解决方案2】:

    您的问题不清楚您是想将其映射为 HQL 查询还是关联。

    我假设您正在谈论一个查询,并且 TABLEATABLEB 之间的关联已经通过 A.UIDB.ID 列映射。在这种情况下,您可以使用with keyword 编写查询:

    select a.*
      from TableA a
      left join a.tableB b
      with b.name = 'JAY'
    

    如果这不是您想要的,请澄清您的问题。

    【讨论】:

    • 嗨 Chyss,我正在使用 Criteria API,因为我需要动态查询。表之间的关联如问题中所定义,仅 ID 列上的连接是不够的。虽然在注释中设置单列连接很容易:@JoinColumn(name = "UID", referencedColumnName = "ID") 我不知道如何添加第二个连接约束。
    • Hibernate 上下文中的“关联”表示“由映射定义的实体之间的关联”。您将能够将您的查询转换为关联定义;核心 Hibernate 允许您使用公式 (docs.jboss.org/hibernate/stable/core/reference/en/html/…) 做到这一点,但它相当混乱;但是,没有与之对应的 JPA / 注释。您也无法使用 Criteria 编写上述查询,因为除了“with”之外别无选择。
    • 非常感谢,所以我唯一的选择是 HQL 或命名查询? (如果我选择不使用公式,即)
    • 这里使用 HQL 的唯一方法是使用 A.UIDB.ID 映射 TableATableB,然后使用上述查询 - 命名或即席。您可以在完全不映射关联的情况下执行命名 SQL。您可以使用该命名的 sql 查询为您的集合(docs.jboss.org/hibernate/stable/core/reference/en/html/…)指定自定义加载器,但这仅适用于直接集合加载;不作为更大查询的一部分。
    • 虽然我没有尝试过,但我认为 Hibernate Filters 可能是解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-06-30
    • 2012-05-01
    • 2013-12-01
    • 2016-07-22
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多