右边加入jpa

时间:2015-07-31 02:42:26

标签: java postgresql java-ee jpa

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查询实现它。

1 个答案:

答案 0 :(得分:0)

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

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

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