【问题标题】:JPQL cannot join tables [closed]JPQL 无法连接表 [关闭]
【发布时间】:2017-09-08 09:46:14
【问题描述】:

你能帮我加入这些桌子吗?我的 JPQL 查询不工作

@Query("Select bp, p from Perks as p, BokPerks as bp where bp.bookingID =:bookingID and bp.payment_id = p.id")
    List<Payment> getTEST(@Param("bookingId")long bookingID);

一个小时都解决不了,也许这是一个简单的错误,但我已经阻止了一点:) BokPerks 实体表:

'131', NULL, '2'
'131', NULL, '3'
'132', NULL, '1'
'132', NULL, '2'
'132', NULL, '3'
'15', '1', '4'
'33', '2', '1'
'33', '2', '2'
'33', '2', '3'
'38', '3', '4'

福利表:

'1', 'lorem ipsum'
'2', '1234'
'3', 'hello '
'4', 'examples'

【问题讨论】:

  • 请定义“不工作”:您收到 Sql 错误、Java 异常还是不是您期望的结果?另外:您的查询中的tbp 是什么?您没有使用该名称定义别名。
  • 它无法创建 bean 异常,因为这些是存储库 @Query 中的硬编码查询
  • 你有异常的堆栈跟踪吗?
  • 你能把Error stack发给你吗?
  • emmm 可能是断路器:@AssociationOverrides({@AssociationOverride(name = "pk.tripBooking", joinColumns = @JoinColumn(name = "trip_booking_id")), @AssociationOverride(name = "pk. TripPayment", joinColumns = @JoinColumn(name = "trip_payment_id"))})

标签: java sql spring hibernate jpql


【解决方案1】:

您的查询没有 JOIN。应该是这样的

@Query("Select bp, p from Perks as p INNER JOIN p.BokPerks as bp where tbp.bookingID =:bookingID and tbp.payment_id = p.id")

我写了INNER JOIN p.BokPerks,但实际上应该有引用的属性名称。没有你的实体类就无法说出确切的语法

假设BokPerks 具有perk 引用属性。那么查询应该是

from  BokPerks as bp INNER JOIN bp.perk as p

【讨论】:

  • p 只有 id 和 description,没有引用其他对象
  • 那么 BokPerks 必须有对 Perks 的引用。
  • 顺便说一句,您只能在 jpql 中使用 where 子句以及在 sql 中连接表
【解决方案2】:

您可以简单地看到您在查询中使用了未知的tbp 别名:

@Query("Select bp, p from Perks as p, BokPerks as bp where tbp.bookingID =:bookingID and tbp.payment_id = p.id")

你写了Select bp, p from Perks as p 然后你写了where tbp.bookingID =:bookingID and tbp.payment_id = p.id

改成:

@Query("Select bp, p from Perks as p, BokPerks as bp where bp.bookingID =:bookingID and bp.payment_id = p.id")

【讨论】:

    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2016-02-18
    • 1970-01-01
    相关资源
    最近更新 更多