【问题标题】:JPQL: determine sub class type from super class join?JPQL:从超类连接中确定子类类型?
【发布时间】:2011-07-04 22:34:28
【问题描述】:

我的问题和这个很相似:

How can I write a Hibernate Criteria query, for a super-class, and check for a certain sub-class?

...,除了一件事:

  • 我使用的是 JPQL 查询而不是 Hibernate Criteria API(尽管 Hibernate 作为 JPA 提供程序)

我引用了一个超级表/实体类(Round),它有两个子表/实体类(RankingRound 和 EliminationRound)。然后我创建一个 JOIN:

SELECT
  ...
  ??? AS is_ranking_round
  ...
FROM Group gr
  JOIN gr.round rd
  ...
WHERE

有没有办法像上面那样在 JPQL 中找出 rd 实例的圆形类型? (我似乎无法将标准转换为适用于 JPQL 的任何内容。)

【问题讨论】:

    标签: hibernate inheritance jpa jpql ejbql


    【解决方案1】:

    这仅适用于 JPA 2.0。 JPA 1 没有 TYPE。

    获取类型为 java.lang.Class:

    Select TYPE(rd)  FROM Group gr JOIN gr.round rd 
    

    将类的类型映射到字符串:

    SELECT
        CASE TYPE(rd)
            WHEN RankingRound THEN 'RankingRound'
            WHEN EliminationRound THEN 'EliminationRound'
           ELSE 'Not mapped'
        END
    FROM Group gr JOIN gr.round rd
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      • 2011-10-16
      • 2021-05-24
      • 2011-07-24
      相关资源
      最近更新 更多