【问题标题】:Right join in jpa右加入jpa
【发布时间】:2015-10-22 14:34:40
【问题描述】:

NewRequest.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(nullable = false)
private Long id;

@Size(max = 2147483647)
@Column(length = 2147483647)
private String data;

@JoinColumn(name = "buyer_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private Buyer buyer_id;

@OneToMany(mappedBy = "newrequest_id", fetch = FetchType.LAZY)
private Collection<Mapping> mappingCollection;  

Mapping.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(nullable = false)
private Long id;

@JoinColumn(name = "seller_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private Seller seller_id;

@JoinColumn(name = "newrequest_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private NewRequest newrequest_id;

可以说,我有这样的记录。

new_request:

id(PK) |  data  | buyer_id(FK)
------------------------------
1      |  data1 |   1
2      |  data2 |   1
3      |  data3 |   2

映射:

id(PK) | newrequest_id(FK) | seller_id(FK)
------------------------------------------
1      |        1          |    1

注意:考虑买家和卖家两个不同的表存在。

我想要所有是否与卖家映射的 new_request。所以,预期的输出:

id   | data  | buyer_id | seller_id
------------------------------------
1    | data1 |  1       |    1
2    | data2 |  1       |
3    | data3 |  2       |

我在 JPA 中尝试了以下查询:

select n.id,n.data,n.buyer_id,m.seller_id from Mapping m left join m.newrequest_id n 

它只给出一个数据(输出第 1 行)。

我使用本机查询通过右连接获得了结果。但我想使用 JPA 查询来实现它。

【问题讨论】:

  • 您没有提供实体模型,这将有助于理解您的查询。通常我会在你的NewRequest 类中推荐一个mappedBy 字段。另一句话:不要调用您的 XToX 字段..._id - 您在 JPA 中引用实体,而不是 ID。所以最好使用newrequest 而不是newrequest_id

标签: java postgresql jakarta-ee jpa


【解决方案1】:

您只需要在查询中切换实体类(在大多数情况下,右外连接只是左外连接的 em>):

select n.id, n.data, n.buyer_id, m.seller_id 
  from NewRequest n left join n.mappingCollection m

正如我在上面的评论中已经建议的那样:您应该从属性中删除 _id 后缀,因为这样更易于阅读和理解。

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 2020-09-02
    • 2015-10-21
    • 2011-10-17
    • 2013-06-26
    • 2011-04-13
    • 2010-10-02
    • 2013-10-13
    相关资源
    最近更新 更多