有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用JPA中的SqlResultsMapping将本机sql结果映射到oneToMany字段

例如,假设我有以下数据库表

Building
-----------
id
name

Room
-----------
id
roomNo
buildingId

构建Java类将类似于

@Entity
public class Building {       
   private int id;
   @OneToMany private List<Room> rooms;
...

我有以下SQL来获取建筑

SELECT   b.id,
         b.name,
         r.id AS rid,
         r.roomNo 
FROM     Building b
  LEFT JOIN Room r ON
         b.id = r.buildingId

结果将是

id, name, rid, roomNo
---------------------
1, 'b1', 10, 'r100'
1, 'b1', 11, 'r101'
2, 'b2', 12, 'r10'

请注意,由于一对多关系,存在重复的建筑

我知道我可以通过使用JPQL简单地获得构建实体,但我想用原生SQL实现这一点。那么,我如何使用JPA的@SQLResultsMapping将上面的结果映射回Building类呢


共 (1) 个答案

  1. # 1 楼答案

    如果要保留Join语句,可以使用以下代码:

    SELECT DISTINCT
             b.id,
             b.name,
             0 AS rid,
             '' AS roomNo 
    
    FROM     Building b
      LEFT JOIN Room r ON
             b.id = r.buildingId