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查询实现它。
答案 0 :(得分:0)
您只需要在查询中切换实体类(在大多数情况下,右外连接只是左外连接的逆 ):
select n.id, n.data, n.buyer_id, m.seller_id
from NewRequest n left join n.mappingCollection m
正如我在上面的评论中已经建议的那样:您应该从属性中删除_id
后缀,因为这样做更好阅读和理解。